Библиотека для маскировки чувствительных данных (пароли, токены, и т.д.) в строках, словарях и списках
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-паттернов через параметр
custom_patterns.
Autograd и нейронные сети
Tensor– многомерный массив (обёртка надnumpy) с поддержкой autograd.- Автоматическое дифференцирование – градиенты скалярных функций через
.backward(). - Базовые слои:
Linear,ReLU,Sequential. - Функции потерь:
mse_loss. - Оптимизатор:
SGD. - Контекстный менеджер
no_grad()для отключения вычисления градиентов. - Расширенные операции:
exp,log,mean,stack,reshape, суммирование по оси.
Установка
pip install maskinfly
Или из репозитария
git clone "https://github.com/MordantAcid/maskifly.git"
cd maskinfly
Для поддержки pydantic.SecretStr установите дополнительную зависимость:
pip install maskinfly[pydantic]
Быстрый старт
Маскировка данных
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': 'u**@example.com'}
# Строка с JWT
jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNryP4J3jVmNHl0w5N_XgL0n3I9PlFUP0THsR8U"
print(mask(f"Authorization: {jwt}"))
# 'Authorization: ***'
# Включение аудита (логи в stderr)
mask(data, audit_enabled=True)
Гибкая настройка маски
Вы можете изменить символ и длину маски прямо в функции mask:
mask("my_secret_password", mask_char='X', mask_length=5) # 'XXXXX'
mask("user@example.com", mask_char='*', mask_length=4) # 'u****@example.com'
Явное указание имени переменной (рекомендуется)
Автоматическое определение имени переменной (auto_varname=True) работает через интроспекцию стека и медленно. Для production используйте параметр var_name:
result = mask("my_secret_pass", var_name="password")
print(result) # '***'
Маскировка по имени переменной (автоматическая, не для production)
# Включите auto_varname (медленно, не рекомендуется)
secret = "my_secret_pass"
result = mask(secret, auto_varname=True)
print(result) # '***'
Добавление своих regex-паттернов
import re
from maskinfly import mask
def my_replacer(match, mask_char, mask_length):
return mask_char * mask_length
custom = {
"my_id": (re.compile(r'\d{4}-\d{4}'), my_replacer)
}
data = "User ID: 1234-5678"
print(mask(data, custom_patterns=custom)) # 'User ID: ***'
Работа с pydantic.SecretStr
from pydantic import SecretStr
from maskinfly import mask
secret = SecretStr("very_secret")
masked = mask(secret)
print(masked) # '***'
Использование Masker с постоянными настройками
from maskinfly import Masker
# Создаём маскировщик с нестандартными параметрами
masker = Masker(mask_char='#', mask_length=6)
print(masker.mask("password=12345")) # 'password=######'
Аудит маскировки
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, ReLU, экспонентой
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.autograd import is_grad_enabled
print(is_grad_enabled()) # True
Дополнительные операции тензоров
t = Tensor([[1, 2], [3, 4]], requires_grad=True)
# Суммирование по оси
s = t.sum(axis=0)
s.backward(np.array([1, 1]))
# Изменение формы
r = t.reshape(4)
r.backward(np.ones(4))
# Логарифм и экспонента
log_t = t.log()
exp_t = t.exp()
# Среднее значение
m = t.mean()
m.backward()
# Объединение тензоров
a = Tensor([1, 2], requires_grad=True)
b = Tensor([3, 4], requires_grad=True)
stacked = Tensor.stack([a, b], axis=0)
stacked.sum().backward()
Простая нейронная сеть
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.5.tar.gz
(21.0 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.5-py3-none-any.whl
(15.0 kB
view details)
File details
Details for the file maskinfly-0.1.5.tar.gz.
File metadata
- Download URL: maskinfly-0.1.5.tar.gz
- Upload date:
- Size: 21.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8559f2fef2ec0b84e55164f79c828d9faedc3b408330542f90ff1d36c7c15ba0
|
|
| MD5 |
02fb75892b3f43e9d9e98789b621d73c
|
|
| BLAKE2b-256 |
8b0ef740f736aee3eb4448559b86a04881533ae1a8b71816e7f9a9bc1e4a084c
|
File details
Details for the file maskinfly-0.1.5-py3-none-any.whl.
File metadata
- Download URL: maskinfly-0.1.5-py3-none-any.whl
- Upload date:
- Size: 15.0 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 |
57150ce45e51e8a3e01448c59691d67261237fadf9f1ee5d6caf0dc59f09d54e
|
|
| MD5 |
546af73237ab82cb2ecad1ff58ac03f6
|
|
| BLAKE2b-256 |
8eac3007c58421c58545b357d7225d396aad3ed150f9557e362dd367fd5e8b8c
|