yeref 0.24.99__py3-none-any.whl → 0.25.1__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,108 +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
|
-
|
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)
|
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
|
-
|
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)
|
16040
|
+
|
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
16050
|
|
16051
|
-
|
16052
|
-
|
16053
|
-
|
16054
|
-
|
16055
|
-
|
16056
|
-
|
16057
|
-
|
16058
|
-
|
16059
|
-
|
16060
|
-
|
16051
|
+
if sheet_id_to_rename is not None:
|
16052
|
+
rename_request = {
|
16053
|
+
'requests': [
|
16054
|
+
{
|
16055
|
+
'updateSheetProperties': {
|
16056
|
+
'properties': {
|
16057
|
+
'sheetId': sheet_id_to_rename,
|
16058
|
+
'title': PROJECT_USERNAME
|
16059
|
+
},
|
16060
|
+
'fields': 'title'
|
16061
|
+
}
|
16061
16062
|
}
|
16062
|
-
|
16063
|
-
|
16064
|
-
|
16065
|
-
|
16066
|
-
|
16067
|
-
|
16068
|
-
|
16069
|
-
|
16070
|
-
|
16071
|
-
|
16072
|
-
|
16073
|
-
|
16074
|
-
|
16075
|
-
|
16076
|
-
|
16077
|
-
|
16078
|
-
|
16079
|
-
|
16080
|
-
|
16081
|
-
|
16082
|
-
|
16083
|
-
|
16084
|
-
|
16085
|
-
|
16086
|
-
|
16087
|
-
|
16088
|
-
|
16089
|
-
|
16090
|
-
|
16091
|
-
|
16092
|
-
|
16093
|
-
|
16094
|
-
|
16095
|
-
|
16096
|
-
|
16097
|
-
offset += len(tbl['rows'])
|
16063
|
+
]
|
16064
|
+
}
|
16065
|
+
sheets_service.spreadsheets().batchUpdate(
|
16066
|
+
spreadsheetId=dataroom_folder_id,
|
16067
|
+
body=rename_request
|
16068
|
+
).execute()
|
16069
|
+
logger.info(f"Лист переименован в '{PROJECT_USERNAME}'.")
|
16070
|
+
else:
|
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
16098
|
|
16099
|
-
|
16100
|
-
|
16099
|
+
# 5.3) Оставляем минимум 2 пустые строки перед следующей таблицей
|
16100
|
+
offset += 2
|
16101
16101
|
|
16102
|
-
|
16103
|
-
|
16104
|
-
|
16105
|
-
|
16106
|
-
|
16107
|
-
|
16108
|
-
|
16109
|
-
|
16110
|
-
|
16111
|
-
|
16112
|
-
|
16113
|
-
|
16114
|
-
|
16115
|
-
|
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}")
|
16116
16116
|
except Exception as e:
|
16117
16117
|
logger.info(log_ % str(e))
|
16118
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=DfuhzfUBIlg5vweCztijcrJWXhSBGkK5ftOlxnMIFHg,1055618
|
5
|
+
yeref-0.25.1.dist-info/METADATA,sha256=rjvJMVNCxzK1wec83_EG2KJ5lkgGUMkW-0_zOXslF-g,118
|
6
|
+
yeref-0.25.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
7
|
+
yeref-0.25.1.dist-info/top_level.txt,sha256=yCQKchWHbfV-3OuQPYRdi2loypD-nmbDJbtt3OuKKkY,6
|
8
|
+
yeref-0.25.1.dist-info/RECORD,,
|
yeref-0.24.99.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=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,,
|
File without changes
|
File without changes
|