yeref 0.24.97__py3-none-any.whl → 0.24.99__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
@@ -16011,100 +16011,108 @@ async def calc_metrics(bot, PROJECT_USERNAME, dataroom_folder_id, EXTRA_D, BASE_
|
|
16011
16011
|
r4 = await return_retention_metrics(bot, data_users, EXTRA_D)
|
16012
16012
|
r5 = await return_profit_and_loss_metrics(bot, data_users, EXTRA_D)
|
16013
16013
|
|
16014
|
-
|
16015
|
-
|
16016
|
-
|
16017
|
-
|
16018
|
-
|
16019
|
-
|
16020
|
-
|
16021
|
-
|
16022
|
-
|
16023
|
-
|
16024
|
-
|
16025
|
-
|
16026
|
-
|
16027
|
-
|
16028
|
-
|
16029
|
-
# 3) Ищем лист с названием «Лист1» или «Sheet1»
|
16030
|
-
sheet_id_to_rename = None
|
16031
|
-
original_title = None
|
16032
|
-
for sheet in spreadsheet.get('sheets', []):
|
16033
|
-
props = sheet.get('properties', {})
|
16034
|
-
title = props.get('title', '')
|
16035
|
-
if title in ['Лист1', 'Sheet1']:
|
16036
|
-
sheet_id_to_rename = props.get('sheetId')
|
16037
|
-
original_title = title
|
16038
|
-
logger.info(f"Найден лист для переименования: sheetId={sheet_id_to_rename}, title='{title}'")
|
16039
|
-
break
|
16014
|
+
# --- Начинаем сразу с объединённого цикла по всем метрикам r1–r5 ---
|
16015
|
+
metrics_paths = [r1, r2, r3, r4, r5]
|
16016
|
+
tables = [] # сюда будем складывать словари вида {'name': basename, 'rows': [[...], ...]}
|
16017
|
+
|
16018
|
+
# 1) Собираем существующие CSV-файлы
|
16019
|
+
for path in metrics_paths:
|
16020
|
+
if path and os.path.isfile(path):
|
16021
|
+
basename = os.path.basename(path)
|
16022
|
+
with open(path, newline='', encoding='utf-8') as csvfile:
|
16023
|
+
reader = csv.reader(csvfile)
|
16024
|
+
rows = list(reader)
|
16025
|
+
logger.info(f"Найден файл '{basename}', строк = {len(rows)}.")
|
16026
|
+
tables.append({'name': basename, 'rows': rows})
|
16027
|
+
else:
|
16028
|
+
logger.warning(f"Файл не найден или не существует: {path}")
|
16040
16029
|
|
16041
|
-
|
16042
|
-
|
16043
|
-
|
16044
|
-
|
16045
|
-
|
16046
|
-
|
16047
|
-
|
16048
|
-
|
16049
|
-
|
16050
|
-
|
16051
|
-
'fields': 'title'
|
16052
|
-
}
|
16053
|
-
}
|
16054
|
-
]
|
16055
|
-
}
|
16056
|
-
sheets_service.spreadsheets().batchUpdate(
|
16057
|
-
spreadsheetId=dataroom_folder_id,
|
16058
|
-
body=rename_request
|
16059
|
-
).execute()
|
16060
|
-
logger.info(f"Запрос на переименование отправлен: '{original_title}' → '{PROJECT_USERNAME}'")
|
16061
|
-
|
16062
|
-
# 5) Подтягиваем снова metadata, чтобы убедиться, что название поменялось
|
16063
|
-
spreadsheet_after = sheets_service.spreadsheets().get(spreadsheetId=dataroom_folder_id).execute()
|
16064
|
-
logger.info("После переименования. Список листов теперь:")
|
16065
|
-
for sheet in spreadsheet_after.get('sheets', []):
|
16066
|
-
props = sheet.get('properties', {})
|
16067
|
-
logger.info(f" • sheetId={props.get('sheetId')} title='{props.get('title')}'")
|
16068
|
-
else:
|
16069
|
-
logger.warning("Не найден лист с названием 'Лист1' или 'Sheet1' — пропускаем переименование.")
|
16030
|
+
# 2) Если ни одного CSV не обнаружено, выходим
|
16031
|
+
if not tables:
|
16032
|
+
logger.warning("Ни один CSV-файл не найден. Прерываем запись.")
|
16033
|
+
else:
|
16034
|
+
# 3) Авторизация в Google Sheets
|
16035
|
+
scopes = r_conf('scopes', CONF_P)
|
16036
|
+
credential_path = os.path.join(EXTRA_D, (r_conf('credential_file', CONF_P))[0])
|
16037
|
+
credentials = ServiceAccountCredentials.from_json_keyfile_name(credential_path, scopes)
|
16038
|
+
http_auth = credentials.authorize(httplib2.Http())
|
16039
|
+
sheets_service = build('sheets', 'v4', http=http_auth, cache_discovery=False)
|
16070
16040
|
|
16071
|
-
|
16072
|
-
|
16073
|
-
|
16074
|
-
|
16075
|
-
|
16076
|
-
|
16077
|
-
|
16078
|
-
|
16079
|
-
|
16080
|
-
|
16081
|
-
|
16082
|
-
|
16083
|
-
|
16084
|
-
write_body = {
|
16085
|
-
'valueInputOption': 'USER_ENTERED',
|
16086
|
-
'data': [
|
16041
|
+
# 4) Переименовываем стандартный лист «Лист1»/«Sheet1» → PROJECT_USERNAME
|
16042
|
+
spreadsheet = sheets_service.spreadsheets().get(spreadsheetId=dataroom_folder_id).execute()
|
16043
|
+
sheet_id_to_rename = None
|
16044
|
+
for sheet in spreadsheet.get('sheets', []):
|
16045
|
+
props = sheet.get('properties', {})
|
16046
|
+
title = props.get('title', '')
|
16047
|
+
if title in ['Лист1', 'Sheet1']:
|
16048
|
+
sheet_id_to_rename = props.get('sheetId')
|
16049
|
+
break
|
16050
|
+
|
16051
|
+
if sheet_id_to_rename is not None:
|
16052
|
+
rename_request = {
|
16053
|
+
'requests': [
|
16087
16054
|
{
|
16088
|
-
'
|
16089
|
-
|
16090
|
-
|
16055
|
+
'updateSheetProperties': {
|
16056
|
+
'properties': {
|
16057
|
+
'sheetId': sheet_id_to_rename,
|
16058
|
+
'title': PROJECT_USERNAME
|
16059
|
+
},
|
16060
|
+
'fields': 'title'
|
16061
|
+
}
|
16091
16062
|
}
|
16092
16063
|
]
|
16093
16064
|
}
|
16094
|
-
|
16095
|
-
|
16096
|
-
|
16097
|
-
|
16098
|
-
|
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}")
|
16065
|
+
sheets_service.spreadsheets().batchUpdate(
|
16066
|
+
spreadsheetId=dataroom_folder_id,
|
16067
|
+
body=rename_request
|
16068
|
+
).execute()
|
16069
|
+
logger.info(f"Лист переименован в '{PROJECT_USERNAME}'.")
|
16105
16070
|
else:
|
16106
|
-
logger.warning(
|
16071
|
+
logger.warning("Не найден лист 'Лист1' или 'Sheet1' для переименования.")
|
16072
|
+
|
16073
|
+
# 5) Готовим запросы для записи всех таблиц одна за другой с промежутком
|
16074
|
+
safe_title = PROJECT_USERNAME.replace("'", "\\'")
|
16075
|
+
offset = 1 # первая строка, с которой начнём писать
|
16076
|
+
data_requests = []
|
16077
|
+
|
16078
|
+
for tbl in tables:
|
16079
|
+
# 5.1) Заголовок: имя CSV-файла
|
16080
|
+
header_range = f"'{safe_title}'!A{offset}"
|
16081
|
+
data_requests.append({
|
16082
|
+
'range': header_range,
|
16083
|
+
'majorDimension': 'ROWS',
|
16084
|
+
'values': [[tbl['name']]]
|
16085
|
+
})
|
16086
|
+
logger.info(f"Добавлен заголовок '{tbl['name']}' → A{offset}")
|
16087
|
+
offset += 1
|
16088
|
+
|
16089
|
+
# 5.2) Содержимое CSV: все строки сразу под заголовком
|
16090
|
+
data_range = f"'{safe_title}'!A{offset}"
|
16091
|
+
data_requests.append({
|
16092
|
+
'range': data_range,
|
16093
|
+
'majorDimension': 'ROWS',
|
16094
|
+
'values': tbl['rows']
|
16095
|
+
})
|
16096
|
+
logger.info(f"Добавлены {len(tbl['rows'])} строк из '{tbl['name']}' → A{offset}")
|
16097
|
+
offset += len(tbl['rows'])
|
16098
|
+
|
16099
|
+
# 5.3) Оставляем минимум 2 пустые строки перед следующей таблицей
|
16100
|
+
offset += 2
|
16107
16101
|
|
16102
|
+
# 6) Выполняем единый batchUpdate для всех data_requests
|
16103
|
+
write_body = {
|
16104
|
+
'valueInputOption': 'USER_ENTERED',
|
16105
|
+
'data': data_requests
|
16106
|
+
}
|
16107
|
+
try:
|
16108
|
+
response = sheets_service.spreadsheets().values().batchUpdate(
|
16109
|
+
spreadsheetId=dataroom_folder_id,
|
16110
|
+
body=write_body
|
16111
|
+
).execute()
|
16112
|
+
total_cells = response.get('totalUpdatedCells', 0)
|
16113
|
+
logger.info(f"Успешно записано в Google Sheets: всего обновлено ячеек = {total_cells}.")
|
16114
|
+
except Exception as e:
|
16115
|
+
logger.error(f"Ошибка при записи всех таблиц в Google Sheets: {e}")
|
16108
16116
|
except Exception as e:
|
16109
16117
|
logger.info(log_ % str(e))
|
16110
16118
|
await asyncio.sleep(round(random.uniform(0, 1), 2))
|
@@ -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=Dj2jndTfiXUJ_fB-hL4tP9ougOcVbUxXdE6HHZ-ikEw,1055246
|
5
|
+
yeref-0.24.99.dist-info/METADATA,sha256=DEUgBkgS-tNtezhSF4aD_Rh59oyMn13Mbtql4JbRvvQ,119
|
6
|
+
yeref-0.24.99.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
7
|
+
yeref-0.24.99.dist-info/top_level.txt,sha256=yCQKchWHbfV-3OuQPYRdi2loypD-nmbDJbtt3OuKKkY,6
|
8
|
+
yeref-0.24.99.dist-info/RECORD,,
|
yeref-0.24.97.dist-info/RECORD
DELETED
@@ -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,,
|
File without changes
|
File without changes
|