type: standard
aspect: naming
title: "Стандарт: Импорты и имена"
version: 1.0.0
date: 2026-02-19
status: active
Версия: 1.0.0
Дата: 2026-01-07
Статус: ОБЯЗАТЕЛЬНО
ЕДИНЫЙ ИСТОЧНИК ИСТИНЫ → НЕТ ПУТАНИЦЫ
Все имена, пути, сокращения определены централизованно в system/config/REGISTRY.yaml
| Раздел | Что определяет | Пример |
|---|---|---|
environment |
Переменные окружения | WORKSPACE, PYTHONPATH |
directories |
Пути к директориям | library, projects, data |
library.connectors |
API коннекторы | ozon, onec, pochta |
library.functions |
Функции | price_parser, article_parser |
library.internal |
Внутренние утилиты | filemanager |
services |
Сервисы платформы | docs, upload, file_share |
projects |
Проекты | pirotehnika, lideravto |
aliases |
Псевдонимы | 1c → onec |
$WORKSPACE/system/config/REGISTRY.yaml
# 1. Использовать registry helper
from system.core.registry import get_path, get_service, get_import
workspace = get_path('workspace') # возвращает $WORKSPACE
docs_url = get_service('docs', 'url') # http://docs.0kt.ru
ozon_path = get_import('ozon') # library.connectors.api.ozon
# 2. Короткие импорты (через library/__init__.py)
from library import OzonClient, OneCClient
# 3. Полные импорты (если нужна явность)
from library.connectors.api.ozon import OzonClient
from library.connectors.api.onec import OneCClient
Используй переменные:
- $WORKSPACE — корень платформы (код)
- $DATASPACE — хранилище данных (S3)
Сервисы:
- Документация: http://docs.0kt.ru
- Загрузка: http://upload.0kt.ru
# Использовать переменные окружения
cd $WORKSPACE/projects/pirotehnika
python3 $WORKSPACE/system/scripts/backup.sh
❌ НЕ ТАК:
# Добавил новый коннектор, импортирую напрямую
from library.connectors.api.newapi import NewApiClient
✅ ТАК:
# 1. Добавить в REGISTRY.yaml
library:
connectors:
newapi:
path: "library.connectors.api.newapi"
main_class: "NewApiClient"
description: "New API коннектор"
# 2. Импортировать
from library import NewApiClient # Автоматически доступен
❌ НЕ ТАК:
import library.connectors.api.1c as onec # Локальный алиас
✅ ТАК:
# В REGISTRY.yaml
aliases:
"1c": "onec"
from library import OneCClient # Используем правильное имя
❌ НЕ ТАК:
workspace = "/opt/claude-workspace" # Хардкод
✅ ТАК:
from system.core.registry import workspace
# или
import os
workspace = os.getenv('WORKSPACE')
❌ НЕ ТАК:
docs_url = "http://docs.0kt.ru" # Хардкод
✅ ТАК:
from system.core.registry import get_service
docs_url = get_service('docs', 'url')
# ~/.bashrc
export WORKSPACE=/opt/claude-workspace
export DATASPACE=/mnt/beget-s3
export PYTHONPATH="$WORKSPACE"
# /etc/environment
WORKSPACE=/opt/claude-workspace
DATASPACE=/mnt/beget-s3
PYTHONPATH=/opt/claude-workspace
import os
workspace = os.getenv('WORKSPACE') # корень платформы
dataspace = os.getenv('DATASPACE') # хранилище данных
# 1. Короткий (удобно)
from library import OzonClient, OneCClient
# 2. Полный (явно)
from library.connectors.api.ozon import OzonClient
# 3. Через registry (программно)
from system.core.registry import get_import
import importlib
path = get_import('ozon') # library.connectors.api.ozon
module = importlib.import_module(path)
client = module.OzonClient()
| Способ | Когда использовать |
|---|---|
from library import X |
В большинстве случаев (удобно) |
from library.connectors.api.X import Y |
Когда нужна явность источника |
registry + importlib |
Динамическая загрузка модулей |
# Модули
my_module.py # snake_case
# Классы
class MyClass: # PascalCase
# Функции
def my_function(): # snake_case
# Константы
MY_CONSTANT = 10 # UPPER_SNAKE_CASE
README.md # UPPER_SNAKE_CASE
config.yaml # lower_snake_case
script.py # snake_case
app_products -- Приложение
sol_orders -- Решение
prj_tasks -- Проект
usr_custom_data -- Пользовательская
1. Создать код в library/
2. Добавить в REGISTRY.yaml
3. library/__init__.py автоматически подхватит
4. Использовать: from library import NewComponent
# 1. Создать коннектор
mkdir -p library/connectors/api/wildberries
cat > library/connectors/api/wildberries/__init__.py << 'EOF'
class WildberriesClient:
def __init__(self, api_key):
self.api_key = api_key
EOF
# 2. Добавить в REGISTRY.yaml
library:
connectors:
wildberries:
path: "library.connectors.api.wildberries"
main_class: "WildberriesClient"
description: "Wildberries API"
# 3. Использовать
from library import WildberriesClient # Автоматически доступен!
# Показать все доступные импорты
python3 system/core/registry.py
# Вывод:
# === Platform Registry ===
#
# Переменные окружения:
# WORKSPACE: $WORKSPACE
# DATASPACE: $DATASPACE
#
# Импорты:
# ozon: library.connectors.api.ozon
# onec: library.connectors.api.onec
# ...
system/config/REGISTRY.yamlsystem/core/registry.pylibrary/__init__.py для автоматических реэкспортов1c → onec (валидный Python identifier)PYTHONPATH="$WORKSPACE" на уровне платформыПринцип: Один раз определили в REGISTRY.yaml → везде используется единообразно.