Skip to main content

No project description provided

Project description

Garpix Utils

Набор утилит для GARPIX CMS.

Утилиты:

  • file.get_file_path - генерация пути для сохранения файла (для FileField)
  • string.get_random_string - создание строки случайных символов
  • signature.make_signature_sha512 - создание цифровой подписи
  • models.ActiveMixin - миксин для моделей, которым необходимо поле "Активность"
  • models.EmptyMixin - миксин-пустышка, который можно использовать при обязательных миксинах
  • models.AvailableMixin - миксин для моделей, которые должны обладать полями "Активность" и "Удалено"
  • models.PolymorphicActiveMixin - миксин для модели garpix_page.BasePage, добавляет возможность выбора доступных страниц (которые активны). Используется внутри GARPIX CMS.
  • templatetags.url_replace - подмена одного значения в dict на другое в Django-шаблонах.
  • models.DeleteMixin - миксин для моделей, добавляющий функционал мягкого/жесткого удаления, models.AdminDeleteMixin - миксин для админ.модели.
  • models.PolymorphicAvailableMixin - миксин для модели garpix_page.BasePage, добавляет возможность выбора доступных страниц (которые активны и неудалены). Используется внутри GARPIX CMS.
  • models.GarpixSiteConfiguration - класс для добавления мультисайтовых настроек в проекте, admin.GarpixSiteConfigurationAdmin - класс для админ.панели

Установка

Установка с помощью pip:

pip install garpix_utils

Утилиты

file.get_file_path - генерация пути для сохранения файла (для FileField)

file.get_secret_path - генерация уникального пути для переданного имени файла

Формирует путь файла относительно года и месяца, чтобы множество файлов не скапливались на одном уровне.

Можно использовать в качестве значения 'upload_to' поля FileField модели Django.

ПРИМЕР:

from garpix_utils.file import get_file_path
from django.db import models


class FileModel(models.Model):
    # ...
    file = models.FileField(upload_to=get_file_path, blank=True, null=True, verbose_name=_('File'))
    # ...

string.get_random_string - создание строки случайных символов

Создает случайную строку указанного размера и с указанными символами.

Параметры:

  • size: int - количество символов. По умолчанию - 8.
  • chars: str - строка из списка символов, которые могут быть в строке. По умолчанию string.ascii_uppercase + string.digits.

ПРИМЕР:

Пример 1

from garpix_utils.string import get_random_string

random_string = get_random_string(16)

# random_string = '451DNCLZLY2HDDDX'

Пример 2

import string
from garpix_utils.string import get_random_string

random_string = get_random_string(8, string.ascii_lowercase)

# random_string = 'palsjpyz'

Пример 3

from garpix_utils.string import get_random_string

random_string = get_random_string(16, '01')

# random_string = '0110111101010100'

signature.make_signature_sha512 - создание цифровой подписи

Создает сигнатуру (цифровую подпись) по указанным параметрам с хэшированием SHA-512.

Обычно используется для эквайринга в качестве защиты цифровой подписью.

ВНИМАНИЕ! Если необходим другой алгоритм шифрования, то загляните в эту функцию, можно сделать свой по аналогии.

Параметры:

  • params: dict - словарь параметров. Если присутствует signature_key, то он будет удален.
  • signature_key: str - ключ параметра с сигнатурой. По умолчанию "sig".
  • secret: str - секретный ключ, который будет приконкатенирован в конце перед хэшированием.

Алгоритм:

  1. Берет словарь параметров, удаляет оттуда параметр с ключом сигнатуры (см. переменную signature_key, по умолчанию значение "sig")
  2. Получившийся словарь сортирует по названию ключа в алфавитном порядке. Все вложенные данные тоже сортируются по ключу, списочные - просто по алфавиту.
  3. Последовательно конкатенирует ключ со значением в единую строку.
  4. В конце конкатенирует значение переменной secret (по умолчанию равна "secret").
  5. Хэширует по алгоритму SHA-512 и возвращает строку в нижнем регистре.
  6. Возвращает получившийся результат.

ПРИМЕР:

# необходимый вам файл

from garpix_utils.signature import make_signature_sha512


sig = make_signature_sha512({'a': 'xxx', 'c': 'ggg', 'b': '111', 'sig': '123', 'd': [3, 1, 2], 'e': {'b': '2', 'a': '1'}}, signature_key='sig', secret='secret')

# sig = '2123086085ec1fe67595d7b3d2b6a0dbf3f33e528d78366b8d62d7f0a7e3c090077b0f7b8dc84921a6087aa57b8284bd1e74702df7a16e96f73f627e6eea815a'

Разбор примера по шагам:

Шаг 1

  • Было: {'a': 'xxx', 'c': 'ggg', 'b': '111', 'sig': '123', 'd': [3, 1, 2], 'e': {'b': '2', 'a': '1'}}
  • Стало: {'a': 'xxx', 'c': 'ggg', 'b': '111', 'd': [3, 1, 2], 'e': {'b': '2', 'a': '1'}}

Шаг 2

  • Было: {'a': 'xxx', 'c': 'ggg', 'b': '111', 'd': [3, 1, 2], 'e': {'b': '2', 'a': '1'}}
  • Стало: {'a': 'xxx', 'b': '111', 'c': 'ggg', 'd': [1, 2, 3], 'e': {'a': '1', 'b': '2'}}

Шаг 3

  • Было: {'a': 'xxx', 'b': '111', 'c': 'ggg', 'd': [1, 2, 3], 'e': {'a': '1', 'b': '2'}}
  • Стало: 'axxxb111cgggd123ea1b2'

Шаг 4

  • Было: 'axxxb111cgggd123ea1b2'
  • Стало: 'axxxb111cgggd123ea1b2secret'

Шаг 5

  • Было: 'axxxb111cgggd123ea1b2secret'
  • Стало: '2123086085ec1fe67595d7b3d2b6a0dbf3f33e528d78366b8d62d7f0a7e3c090077b0f7b8dc84921a6087aa57b8284bd1e74702df7a16e96f73f627e6eea815a'

models.ActiveMixin - миксин для моделей, которым необходимо поле "Активность"

Добавляет поле is_active (Boolean, default=True). Добавляет менеджера active_objects, который выбирает только активные объекты (is_active=True).

ПРИМЕР:

# необходимый вам файл

from django.db import models
from garpix_utils.models import ActiveMixin


class Product(ActiveMixin, models.Model):
    pass


Product.active_objects.all()

# Будут выбраны записи только с is_active == True.

models.EmptyMixin - миксин-пустышка, который можно использовать при обязательных миксинах

ПРИМЕР:

# необходимый вам файл

from django.db import models
from garpix_utils.models import EmptyMixin


class Product(EmptyMixin, models.Model):
    pass

# Ничего не изменилось.

Или использование в пакете garpix_blog:

# app/settings.py

GARPIX_BLOG_MIXIN = 'garpix_utils.models.EmptyMixin'

models.AvailableMixin - миксин для моделей, которые должны обладать полями "Активность" и "Удалено"

Добавляет поля is_active (Boolean, default=True) и is_deleted (Boolean, default=False). Добавляет менеджера available_objects, который выбирает только доступные объекты (is_active=True, is_deleted=False).

ПРИМЕР:

# необходимый вам файл

from django.db import models
from garpix_utils.models import AvailableMixin


class Product(AvailableMixin, models.Model):
    pass


Product.available_objects.all()

# Будут выбраны записи только с is_active == True.

templatetags.url_replace - подмена одного значения в dict на другое в Django-шаблонах.

ПРИМЕР для пагинации (взято из https://github.com/garpixcms/garpix_page/):

{% load url_replace %}

<nav>
    <ul class="pagination">
        {% for page_num in page_range %}
            <li class="page-item {% if page_num == page %}active{% endif %}">
                <a class="page-link" href="?{% url_replace request 'page' page_num %}">{{ page_num }}</a>
            </li>
        {% endfor %}
    </ul>
</nav>

Changelog

See CHANGELOG.md.

Contributing

See CONTRIBUTING.md.

License

MIT

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

garpix_utils-1.10.0.tar.gz (20.8 kB view details)

Uploaded Source

Built Distribution

garpix_utils-1.10.0-py3-none-any.whl (33.3 kB view details)

Uploaded Python 3

File details

Details for the file garpix_utils-1.10.0.tar.gz.

File metadata

  • Download URL: garpix_utils-1.10.0.tar.gz
  • Upload date:
  • Size: 20.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/6.7.0 pkginfo/1.9.6 requests/2.31.0 requests-toolbelt/1.0.0 tqdm/4.65.0 CPython/3.11.5

File hashes

Hashes for garpix_utils-1.10.0.tar.gz
Algorithm Hash digest
SHA256 ead4aaca01951c7da00122d15905cfdbe8ea6fe5acb6ec3061e6f7f9f9d30c29
MD5 3aebfd8f9273851975e9101ed923b365
BLAKE2b-256 60900f0b145b4db1795ec47fd753a224a571a346a2b8135d5f12a45f154c7edb

See more details on using hashes here.

File details

Details for the file garpix_utils-1.10.0-py3-none-any.whl.

File metadata

  • Download URL: garpix_utils-1.10.0-py3-none-any.whl
  • Upload date:
  • Size: 33.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/6.7.0 pkginfo/1.9.6 requests/2.31.0 requests-toolbelt/1.0.0 tqdm/4.65.0 CPython/3.11.5

File hashes

Hashes for garpix_utils-1.10.0-py3-none-any.whl
Algorithm Hash digest
SHA256 45ca459466f228394a3ab56894fb0c43f867480ff5528b5534d881d3a110e70d
MD5 8b564eb82c9d8e1a298fe24b635a0c64
BLAKE2b-256 0353500529ea0e05eef3af8d3dc413b2d9117bbc721a272f5b6f7520c22729c8

See more details on using hashes here.

Supported by

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