Skip to main content

s-corekit — основание экосистемы китов

Значения и чистые правила, на которые опираются остальные пакеты семейства: контекст исполнения, базовые DTO, единая иерархия ошибок, маскировка секретов и классификация состояния доступа. Ноль зависимостей — только stdlib.

     clikit        adapterkit      ветки-оболочки (CLI, адаптеры сервисов)
          \           /
           librarykit             оркестратор (сеть, сессии, браузер)
                |
             corekit              основание (значения и правила)

Установка

pip install s-corekit

Импортируется как corekit. Требуется Python 3.11+.

Быстрый старт

from corekit import ExecutionContext, classify_access, AccessState
from corekit import sanitize_headers, scrub_credentials, RETRYABLE

# 1. Контекст вызова: чей он и под каким профилем идёт.
ctx = ExecutionContext(tenant="acme", profile="main")
ctx.tenant_id, ctx.profile_name          # ('acme', 'main')

# 2. Диагноз по УЛИКЕ, без единого сетевого запроса:
#    200 OK, но конечный URL — страница входа => сессия мертва.
verdict = classify_access(status=200, final_url="https://accounts.google.com/ServiceLogin")
verdict.state                            # AccessState.SESSION_DEAD
verdict.why                              # "сервер оценил куки и увёл на вход (улика: ...)"
verdict.evidence                         # исходная улика, на которой стоит вердикт

# 3. Секреты не утекают в логи.
sanitize_headers({"Authorization": "Bearer ...", "X-Trace": "1"})
# {'authorization': '***', 'x-trace': '1'}
scrub_credentials("socks5://user:pass@127.0.0.1:1080 недоступен")
# 'socks5://***@127.0.0.1:1080 недоступен'

# 4. Одна иерархия ошибок на весь стек + готовый набор «можно повторить».
RETRYABLE                                # (RateLimited, ServerError, TransportError)

Что внутри

Модуль Что даёт
corekit.context ExecutionContext — чей вызов, где его состояние, куда он ходит в сеть. Один тип на экосистему: понимает имена обеих школ (tenant/tenant_id, profile/profile_name) и отказывается угадывать при конфликте значений
corekit.dto SessionRef, Creds, RequestBody
corekit.limits QuotaScope, QuotaInfo, LimitSpec
corekit.enums PaginationMode, AuthMode, TransportKind / RequestExecutionMode
corekit.errors Единая иерархия исключений: CliErrorAuthRequired / RateLimited / Blocked / TransportError / … + кортеж RETRYABLE
corekit.redaction Маскировка секретов в заголовках, теле и тексте (sanitize_headers, sanitize_body, scrub_credentials)
corekit.diagnosis Таксономия причин (Reason) и состояние доступа (AccessState, AccessVerdict, classify_access) — диагноз по улике, без сети
corekit.persona ClientPersona — «чем мы выглядим» одним значением (заголовки, часы, экран, рукопожатие, выход) плюс правила согласованности слоёв: inconsistencies(), is_consistent(), bump()

Персона: противоречие вместо отпечатка

from corekit import ClientPersona

persona = ClientPersona(
    persona_id="acc-42:gemini", version=1,
    browser="chrome", browser_version="151.0.7922.76",
    platform="Windows", platform_version="15.0.0",
    architecture="x86", bitness="64", mobile=False, model="",
    accept_language="ru-RU,ru;q=0.9", locale="ru-RU", timezone="Europe/Moscow",
    screen=(1920, 1080), viewport=(1536, 864),
    tls_target="chrome146", http_version="http/1.1",
    egress_country="FI", egress_kind="datacenter",
)

for item in persona.inconsistencies():
    print(item.severity, item.code, item.layers)
# error   tls-behind-ua           ('tls', 'user-agent')
# error   http-version-mismatch   ('http', 'user-agent')
# error   timezone-vs-egress      ('timezone', 'egress')
# warning language-vs-egress      ('accept-language', 'egress')
# warning egress-datacenter       ('egress',)

persona.is_consistent()  # False — ошибки уровня error есть

Каждый слой здесь корректен ПОРОЗНЬ, и ловят нас не они, а стыки: рукопожатие 146-го Chrome под заголовками 151-го, HTTP/1.1 под современным Chrome, московские часы при финском выходе. Согласованная персона не возвращает НИЧЕГО — ни одного предупреждения «на всякий случай».

Правило отбора

В основание попадает сущность, которая не тянет реализацию: неизменяемое значение или чистая функция над текстом/статусом. Всё, у чего есть жизненный цикл (клиенты, сторы, браузеры, локи), живёт слоем выше — в s-librarykit.

Поэтому зависимостей нет и не будет: dependencies = [] закреплено тестом tests/test_stdlib_only.py. Основание обязано ставиться и туда, где httpx, pydantic или cryptography поставить нельзя.

Совместимость с librarykit

Начиная с s-librarykit 0.7.6 модули librarykit.contract, librarykit.errors, librarykit.redaction и librarykit.diagnosis.* — тонкие реэкспорты этого пакета. Они отдают те же объекты, а не копии, поэтому isinstance, except и сравнение через is работают через любой путь импорта:

from librarykit.errors import CliError as ViaLibrarykit
from corekit.errors import CliError as ViaCorekit
assert ViaLibrarykit is ViaCorekit

Существующий код, импортирующий эти имена из librarykit, менять не нужно.

Цена импорта (замер, а не обещание)

Python 3.14, Windows, холодный интерпретатор, 3 прогона:

что мс
пол stdlib (dataclasses+pathlib+enum+re+json+datetime) 77-85
import corekit поверх пола 24-30
import librarykit поверх того же пола 151-162
полный import corekit / import librarykit ~105 / ~246

Тест меряет цену над полом: абсолютное число описывает машину, а не код, и абсолютный порог пришлось бы задрать так, что приехавший httpx (264 мс) прошёл бы незамеченным.

Лицензия

MIT — см. LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

s_corekit-0.0.13.tar.gz (119.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

s_corekit-0.0.13-py3-none-any.whl (92.4 kB view details)

Uploaded Python 3

File details

Details for the file s_corekit-0.0.13.tar.gz.

File metadata

  • Download URL: s_corekit-0.0.13.tar.gz
  • Upload date:
  • Size: 119.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for s_corekit-0.0.13.tar.gz
Algorithm Hash digest
SHA256 a8afd9ea6690afdade41a0bd27da0218e2af06a94ee65b3d0674226c6845146c
MD5 8a8f5fd01a21e34d0410d9d2835f9a0a
BLAKE2b-256 81f728133928cbfcf8643111c09b52bb23a3de4d3d2cba47e9728012bf94f33f

See more details on using hashes here.

File details

Details for the file s_corekit-0.0.13-py3-none-any.whl.

File metadata

  • Download URL: s_corekit-0.0.13-py3-none-any.whl
  • Upload date:
  • Size: 92.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for s_corekit-0.0.13-py3-none-any.whl
Algorithm Hash digest
SHA256 0f88cd847e01baf84d3aec4e3540b01287240fc69460b685a5f15c3b7d8b497b
MD5 b857d5da4f47d8f3d0a0b3beb265e62c
BLAKE2b-256 a2227fca035ac7d20968ab57c1124ff9280eb5a9a1934a6200a385d6fc2238fb

See more details on using hashes here.

Release history Release notifications | RSS feed

0.0.14

2 files

This release

0.0.13 This release

2 files

0.0.12

2 files

0.0.11

2 files

0.0.10

2 files

0.0.9

2 files

0.0.4

2 files

0.0.3

2 files

0.0.2

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page