yeref 0.24.95__py3-none-any.whl → 0.24.97__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,30 +16011,100 @@ 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
|
-
# === НОВЫЙ БЛОК: читаем CSV (r1) и заливаем его в Google Sheets ===
|
16015
16014
|
if r1 and os.path.isfile(r1):
|
16016
|
-
# 1)
|
16015
|
+
# 1) Авторизация в Google Sheets
|
16016
|
+
scopes = r_conf('scopes', CONF_P)
|
16017
|
+
credential_path = os.path.join(EXTRA_D, (r_conf('credential_file', CONF_P))[0])
|
16018
|
+
credentials = ServiceAccountCredentials.from_json_keyfile_name(credential_path, scopes)
|
16019
|
+
http_auth = credentials.authorize(httplib2.Http())
|
16020
|
+
sheets_service = build('sheets', 'v4', http=http_auth, cache_discovery=False)
|
16021
|
+
|
16022
|
+
# 2) Получаем metadata всей таблицы, чтобы увидеть, какие листы есть сейчас
|
16023
|
+
spreadsheet = sheets_service.spreadsheets().get(spreadsheetId=dataroom_folder_id).execute()
|
16024
|
+
logger.info(f"До переименования. Найдено листов: {len(spreadsheet.get('sheets', []))}")
|
16025
|
+
for sheet in spreadsheet.get('sheets', []):
|
16026
|
+
props = sheet.get('properties', {})
|
16027
|
+
logger.info(f" • sheetId={props.get('sheetId')} title='{props.get('title')}'")
|
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
|
16040
|
+
|
16041
|
+
# 4) Если нашли, то переименовываем в PROJECT_USERNAME
|
16042
|
+
if sheet_id_to_rename is not None:
|
16043
|
+
rename_request = {
|
16044
|
+
'requests': [
|
16045
|
+
{
|
16046
|
+
'updateSheetProperties': {
|
16047
|
+
'properties': {
|
16048
|
+
'sheetId': sheet_id_to_rename,
|
16049
|
+
'title': PROJECT_USERNAME
|
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' — пропускаем переименование.")
|
16070
|
+
|
16071
|
+
# 6) Читаем CSV-файл (r1) целиком
|
16017
16072
|
with open(r1, newline='', encoding='utf-8') as csvfile:
|
16018
16073
|
reader = csv.reader(csvfile)
|
16019
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
|
+
}
|
16020
16094
|
|
16021
|
-
#
|
16022
|
-
|
16023
|
-
|
16024
|
-
|
16025
|
-
|
16026
|
-
|
16027
|
-
|
16028
|
-
|
16029
|
-
|
16030
|
-
|
16031
|
-
sheet_id='Sheet1', # можно заменить на нужное имя листа
|
16032
|
-
value_input_option='USER_ENTERED',
|
16033
|
-
major_dimension='ROWS'
|
16034
|
-
)
|
16035
|
-
logger.info("Activity‐метрики успешно залиты в Google‐таблицу.")
|
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}")
|
16036
16105
|
else:
|
16037
|
-
logger.warning(f"
|
16106
|
+
logger.warning(f"Файл с метриками не найден или не существует: {r1}")
|
16107
|
+
|
16038
16108
|
except Exception as e:
|
16039
16109
|
logger.info(log_ % str(e))
|
16040
16110
|
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=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,,
|
yeref-0.24.95.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=ok-hTzA24mYznwFOVpWpENFpTWfBYQB3oIsFViCKQ70,1051852
|
5
|
-
yeref-0.24.95.dist-info/METADATA,sha256=a1jTMU2YAl5SLj8lDz8LB0eTp_z_wX-qxLjtgKluF_Y,119
|
6
|
-
yeref-0.24.95.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
7
|
-
yeref-0.24.95.dist-info/top_level.txt,sha256=yCQKchWHbfV-3OuQPYRdi2loypD-nmbDJbtt3OuKKkY,6
|
8
|
-
yeref-0.24.95.dist-info/RECORD,,
|
File without changes
|
File without changes
|