SFM/app/app_config.py
2026-09-14 17:25:05 +03:00

61 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from __future__ import annotations
import os
from pathlib import Path
from tempfile import gettempdir
import streamlit as st
SFM_SMB_BASE_PATH = "//sgo-fc01-r06/sfm/ОТЧЕТ_7081У"
SFM_DEFAULT_INPUT_DIR = r"//sgo-fc01-r06/sfm/ОТЧЕТ_7081У"
ACCESS_SUPPORT_CONTACT = "администратору СФМ"
# TODO(BIQ-36593): подтвердить SPACE_ID для прода (сейчас — значение,
# проверенное вручную на тестовом пространстве "AURORA"). ID составной
# ("storageId$spaceId") — храним как есть, без разбора, через
# env-переменную, чтобы не хардкодить прод-значение в коде. В проде
# SPACE_ID личного пространства пользователя определяется динамически
# через opencloud_access.resolve_personal_drive(access_token), это
# значение используется только как тестовый дефолт (AURORA).
OPENCLOUD_SPACE_ID = os.getenv(
"SFM_OPENCLOUD_SPACE_ID",
"28c0cecf-1e20-4664-b165-5c9d5515e70f$95e71bcd-3c89-4b77-b271-63c6d553f4fd",
)
EDIT_PATH_OPEN_KEY = "edit_path_open"
EDIT_PATH_VALUE_KEY = "edit_path_value"
# Runtime-only user paths storage. In bank contour we use tmpfs.
PATH_STORE_FILE = Path(gettempdir()) / "user_paths.json"
def resolve_user_id() -> str:
profile = st.session_state.get("user_profile", {})
if not isinstance(profile, dict):
return "anonymous|anonymous"
email = str(
profile.get("email") or profile.get("preferred_username") or "anonymous"
)
full_name = str(profile.get("name") or profile.get("full_name") or "anonymous")
return f"{email}|{full_name}"
def resolve_opencloud_access_token() -> str | None:
"""Достаёт access_token для OpenCloud из token_data в сессии.
НЕ ПОДТВЕРЖДЕНО: в проде (raisa_streamlit_oauth) неизвестно, содержит ли
token_data ключ "access_token" — в локальном mock_provider.py его нет
(только email/preferred_username/name). Нужно проверить на проде через
st.write(token_data.keys()).
Для локального теста (LOCATION=local, mock-провайдер) — fallback на
переменную окружения SFM_OPENCLOUD_ACCESS_TOKEN из .env. В проде эта
переменная не задана, так что fallback не сработает и не помешает.
"""
token_data = st.session_state.get("token_data", {})
if isinstance(token_data, dict):
value = token_data.get("access_token")
if value:
return str(value)
return os.getenv("SFM_OPENCLOUD_ACCESS_TOKEN") or None