Библиотека для маскировки чувствительных данных (пароли, токены, и т.д.) в строках, словарях и списках
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
Release history Release notifications | RSS feed
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)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
maskinfly-0.1.4-py3-none-any.whl
(13.5 kB
view details)
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c72ace4f1cc86e9a3e191eb2f4fda81775934c32ddc5e2e3b54fca421e557ea9
|
|
| MD5 |
fae984f0c14112e5c439bc2d8a1785e0
|
|
| BLAKE2b-256 |
3e530175d8ef8e271e65fed18c31901e55765bf34cde804bcdeae73a66d62488
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
184d9bcbfe1670a2ba3c404acdfa0669f9fe9b523f9bff465adb1b306e3944d4
|
|
| MD5 |
645476d31f4f445516d27e99050af9c9
|
|
| BLAKE2b-256 |
c607ac0feaa654ca26a0a0884e813ad9b952f091b92ebb7e2ffc68f54bca8211
|