tools Module

Created on 23.07.2012 @author: pirogov

class objectpack.tools.ModelCache(model, object_fabric=None)
Базовые классы: object

Кэш get-ов объектов одной модели. В качестве ключа кэша - набор параметров для get-а Если в конструкторе указана фабрика объектов, то отсутствующие объекты создаются передачей аргументов фабрике.

forget_last()
get(**kwargs)
class objectpack.tools.QuerySplitter(query, start, limit=0)
Базовые классы: object

Порционный загрузчик выборки в итеративном контексте

>>> from django.test.client import RequestFactory
>>> rf = RequestFactory()
>>> request = rf.post('', {'start': 5, 'limit': 10})
>>> QuerySplitter.make_rows(
...     query=range(50),
...     validator=lambda x: x % 2,
...     request=request)
[5, 7, 9, 11, 13, 15, 17, 19, 21, 23]
classmethod make_rows(query, row_fabric=<function <lambda>>, validator=<function <lambda>>, request=None, start=0, limit=25)

Формирует список элементов для грида из выборки. Параметры листания берутся из request, или из параметров start/limit. Элементы перед попаданием прогоняются через row_fabric. В результирующий список попадают только те элементы, вызов validator для которых возвращает True

Параметры:
  • query (django.db.models.query.QuerySet) – Кварисет
  • row_fabric (types.FunctionType) –
  • validator (types.FunctionType) – Функция валидатор
  • request (django.http.HttpRequest) – Реквест
  • start (int) – С какой записи начинать
  • limit (int) – Сколько записей взять
next()
skip_last()

Команда “не учитывать прошлое значение”

class objectpack.tools.TransactionCM(using=None, catcher=None)
Базовые классы: object

Транизакция в виде ContextManager

objectpack.tools.cached_to(attr_name)

Оборачивает простые методы (без аргументов) и property getters, с целью закэшировать первый полученный результат

Параметры:attr_name (str) – Куда кэшировать
objectpack.tools.collect_overlaps(obj, queryset, attr_begin='begin', attr_end='end')

Возвращает список объектов из указанной выборки, которые пересекаются с указанным объектом по указанным полям начала и конца интервала

Параметры:
  • obj – Объект
  • queryset (django.db.models.query.QuerySet) – Выборка
  • attr_begin (str) – Атрибут модели с датой начала
  • attr_end (str) – Атрибут модели с датой конца
objectpack.tools.extract_date(request, key, as_date=False)

Извлечение даты из request`а в формате DD.MM.YYYY (в таком виде приходит от ExtDateField) и приведение к Django-формату (YYYY-MM-DD)

objectpack.tools.extract_int(request, key)

Нормальный извлекатель числа

>>> from django.test.client import RequestFactory
>>> rf = RequestFactory()
>>> request = rf.post('', {})
>>> extract_int(request, 'NaN')
>>> request = rf.post('', {'int':1})
>>> extract_int(request, 'int')
1
objectpack.tools.extract_int_list(request, key)

Нормальный извлекатель списка чисел

>>> from django.test.client import RequestFactory
>>> rf = RequestFactory()
>>> request = rf.post('', {})
>>> extract_int_list(request, 'list')
[]
>>> request = rf.post('', {'list':'1,2,3,4'})
>>> extract_int_list(request, 'list')
[1, 2, 3, 4]
objectpack.tools.find_element_by_type(container, cls)

Поиск экземпляров элементов во всех вложенных контейнерах

Параметры:
  • container (m3_ext.ui.containers.containers.ExtContainer) – Контейнер
  • cls (types.ClassType) – Класс
objectpack.tools.int_list(s)
>>> int_list('10,20, 30')
[10, 20, 30]
objectpack.tools.int_or_none(s)
>>> int_or_none('')
None
>>> int_or_none('10')
10
objectpack.tools.int_or_zero(s)
>>> int_or_zero('')
0
>>> int_or_zero('10')
10
objectpack.tools.istraversable(x)

возвращает True, если объект x позволяет обход себя в цикле for

objectpack.tools.modifier(**kwargs)

Принимает атрибуты со значениями (в виде kwargs) Возвращает модификатор - функцию, модифицирующую передаваемый ей объект указанными атрибутами

>>> w10 = modifier(width=10)
>>> controls = map(w10, controls)
>>> class Object(object): pass
>>> w10 = modifier(width=10)
>>> cls = w10(Object())
>>> cls.width
10
objectpack.tools.modify(obj, **kwargs)

Массовое дополнение атрибутов для объекта с его (объекта) возвратом

>>> class Object(object): pass
>>> cls = Object()
>>> cls.param1 = 0
>>> cls = modify(cls, **{'param1':1, })
>>> cls.param1
1
objectpack.tools.str_to_date(s)

Извлечение даты из строки

>>> str_to_date('31.12.2012') == str_to_date('2012-12-31, Happy New Year')
True