Skip to main content

Библиотека для маскировки чувствительных данных (пароли, токены, и т.д.) в строках, словарях и списках

Project description

maskinfly

maskinfly – это универсальная библиотека для Python, объединяющая:

  • Рекурсивную маскировку чувствительных данных (пароли, токены, email, номера карт, SSN, IP и др.)
  • Лёгкий autograd и базовые компоненты для создания нейронных сетей (тензоры с автоматическим дифференцированием, слои, оптимизаторы).

Возможности

Маскировка данных

  • Рекурсивная обработка dict, list, str, pydantic.SecretStr.
  • Встроенные регулярные выражения: пароли, JWT, email, кредитные карты (шаблон), SSN, IP-адреса, токены.
  • Маскировка по имени переменной (например, password = "secret"***).
  • Аудит замен: логирование пути, причины и типа замаскированного значения.
  • Простой интерфейс: функция mask() или класс Masker.
  • Поддержка pydantic.SecretStr (опционально).
  • Кастомизация маскирующей строки и добавление своих regex-паттернов.

Autograd и нейронные сети

  • Tensor – многомерный массив (обёртка над numpy) с поддержкой autograd.
  • Автоматическое дифференцирование – градиенты скалярных функций через .backward().
  • Базовые слои: Linear, ReLU, Sequential.
  • Функции потерь: mse_loss.
  • Оптимизатор: SGD.
  • Контекстный менеджер no_grad() для отключения вычисления градиентов.
  • Расширенные операции: exp, log, mean, stack и работа с broadcasting.

Установка

pip install maskinfly

Для поддержки pydantic.SecretStr установите дополнительную зависимость:

pip install maskinfly[pydantic]

Либо клонируйте репозиторий:

git clone "https://github.com/MordantAcid/maskifly.git"

cd maskinfly

Быстрый старт
Маскировка данных

from maskinfly import mask

# Словарь с конфиденциальными полями
data = {
    "user": "alice",
    "password": "secret123",
    "token": "abc123xyz",
    "email": "alice@example.com"
}
masked = mask(data)
print(masked)
# {'user': 'alice', 'password': '***', 'token': '***', 'email': 'alice@example.com'}

# Строка с JWT
jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNryP4J3jVmNHl0w5N_XgL0n3I9PlFUP0THsR8U"
print(mask(f"Authorization: {jwt}"))
# 'Authorization: ***'

# Включение аудита (логи в stderr)
mask(data, audit_enabled=True)

Маскировка по имени переменной
Библиотека может автоматически определять имя переменной и маскировать значение, если оно совпадает с чувствительным списком (password, token, api_key и т.д.).

from maskinfly import mask

# Включите auto_varname
secret = "my_secret_pass"
result = mask(secret, auto_varname=True)
print(result)  # '***'

⚠️ Внимание: Функция find_variable_name, используемая при auto_varname=True, работает через интроспекцию стека и не рекомендуется для использования в production из-за низкой производительности. Для production-сценариев лучше передавать имя переменной явно через параметр var_name.

# Явное указание имени переменной (быстрее и надёжнее)
result = mask("my_secret_pass", var_name="password")

Работа с pydantic.SecretStr

from pydantic import SecretStr
from maskinfly import mask

secret = SecretStr("very_secret")
masked = mask(secret)
print(masked)  # '***'

Кастомизация маскировки

from maskinfly import Masker

# Изменение маскирующей строки
masker = Masker()
masker.mask_str = "[MASKED]"
print(masker.mask("password=12345"))  # 'password=[MASKED]'

# Добавление своего паттерна
import re
masker.patterns["my_pattern"] = re.compile(r"my_secret=\S+")
print(masker.mask("my_secret=abc123"))  # 'my_secret=***'

Использование AuditLogger для аудита

from maskinfly import AuditLogger, Masker

audit = AuditLogger()  # логирует в stderr
masker = Masker(audit_enabled=True, audit_logger=audit)
masker.mask({"api_key": "ABCD1234"})
# В stderr: 2025-... - MASKIFY_AUDIT - Значение маски 'api_key' | reason=varname | type=str

Работа с тензорами и autograd

from maskinfly import Tensor, no_grad

# Создание тензоров
a = Tensor([[1.0, 2.0], [3.0, 4.0]], requires_grad=True)
b = Tensor([[5.0, 6.0], [7.0, 8.0]], requires_grad=True)

# Операции
c = a.matmul(b)          # матричное умножение
loss = c.sum()           # скалярная потеря
loss.backward()          # вычисление градиентов

print(a.grad)            # градиент по a
print(b.grad)            # градиент по b

# Пример с broadcasting и нелинейностями
x = Tensor([1.0, 2.0, 3.0], requires_grad=True)
y = (x ** 2).relu().exp()
y.mean().backward()
print(x.grad)

# Отключение градиентов
with no_grad():
    d = a + b            # здесь градиенты не вычисляются

Простая нейронная сеть

from maskinfly import nn, optim
from maskinfly.tensor import Tensor

# Данные (XOR)
X = Tensor([[0, 0], [0, 1], [1, 0], [1, 1]], requires_grad=False)
y = Tensor([[0], [1], [1], [0]], requires_grad=False)

# Модель
model = nn.Sequential(
    nn.Linear(2, 4),
    nn.ReLU(),
    nn.Linear(4, 1)
)

optimizer = optim.SGD(model.parameters(), lr=0.1)

# Обучение
for epoch in range(1000):
    pred = model(X)
    loss = nn.mse_loss(pred, y)
    
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    
    if epoch % 200 == 0:
        print(f"Epoch {epoch}, loss: {loss.data.item():.4f}")

# Проверка
print(model(X).data)

Лицензия
MIT. Подробнее в файле LICENSE.

Project details


Download files

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

Source Distribution

maskinfly-0.1.4.tar.gz (19.3 kB view details)

Uploaded Source

Built Distribution

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

maskinfly-0.1.4-py3-none-any.whl (13.5 kB view details)

Uploaded Python 3

File details

Details for the file maskinfly-0.1.4.tar.gz.

File metadata

  • Download URL: maskinfly-0.1.4.tar.gz
  • Upload date:
  • Size: 19.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for maskinfly-0.1.4.tar.gz
Algorithm Hash digest
SHA256 c72ace4f1cc86e9a3e191eb2f4fda81775934c32ddc5e2e3b54fca421e557ea9
MD5 fae984f0c14112e5c439bc2d8a1785e0
BLAKE2b-256 3e530175d8ef8e271e65fed18c31901e55765bf34cde804bcdeae73a66d62488

See more details on using hashes here.

File details

Details for the file maskinfly-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: maskinfly-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 13.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for maskinfly-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 184d9bcbfe1670a2ba3c404acdfa0669f9fe9b523f9bff465adb1b306e3944d4
MD5 645476d31f4f445516d27e99050af9c9
BLAKE2b-256 c607ac0feaa654ca26a0a0884e813ad9b952f091b92ebb7e2ffc68f54bca8211

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page