Посты с тэгом sacrud


REST API для Pyramid при помощи Cornice и SACRUD

Mozilla использует в своих проектах Pyramid и у них есть отличный модуль для создания REST API https://cornice.readthedocs.org/en/latest/

REST API обычно меняет, создает и удаляет записи, которые хранятся в БД. Что бы не писать много кода на SQLAlchemy я использую заготовленные функции из sacrud

Итак поехали, представим сервис REST API для платежных карт с моделью типа:

class Card(Base):
__tablename__ = 'card'

id = Column(Integer, primary_key=True)
number = Column(BigInteger, nullable=False, unique=True)
uid = Column(BYTEA, nullable=False, unique=True)
balance = Column(Numeric(10, 2), nullable=False, default=0)
preference = Column(GUID())

def __json__(self):
return {'id': self.id,
'number': self.number,
'uid': str(self.uid),


Обновление sacrud. Версия 0.1.2

Код: https://github.com/uralbash/sacrud
Описание: http://sacrud.readthedocs.org/ (в процессе)

В этой версии делался упор на кастомизацию интерфейса.

Что нового?
* добавлена пагинация
* теперь pk показывается по умолчанию в форме создания/редактирования
* новая опция sacrud_detail_col где можно задать отображаемые поля в форме редактирования
* новая опция sacrud_list_col где можно задать отображаемые поля в списке записей
* новая опция verbose_name для полей и таблиц
* опция sacrud_css_class, назначает CSS стили полям
* новая функция horizontal_fields
* новый тип exttype.GUID
* для переопределения base.html создан шаблон redefineme


Обновление sacrud. Версия 0.1.2

Код: https://github.com/uralbash/sacrud
Описание: http://sacrud.readthedocs.org/ (в процессе)

В этой версии делался упор на кастомизацию интерфейса.

Что нового?
* добавлена пагинация
* теперь pk показывается по умолчанию в форме создания/редактирования
* новая опция sacrud_detail_col где можно задать отображаемые поля в форме редактирования
* новая опция sacrud_list_col где можно задать отображаемые поля в списке записей
* новая опция verbose_name для полей и таблиц
* опция sacrud_css_class, назначает CSS стили полям
* новый атрибут колонки sacrud_position: "inline" (см. реализацию horizontal_fields)
* новая функция horizontal_fields


Обновление sacrud. Версия 0.1.1

  
Код: https://github.com/uralbash/sacrud
Описание: http://sacrud.readthedocs.org/

Что нового?
* в расширении для pyramid параметр "sacrud_models" переименован в "sacrud.models"
* "sacrud.models" теперь словарь, а не список:
    settings['sacrud.models'] = {
'Company': [Company, User, EmployeeType],
'Auth': [Group, GroupPermission, UserGroup,
GroupResourcePermission, Resource, UserPermission,
UserResourcePermission, ExternalIdentity],
'': [Company]
}
* в словаре можно поделить модели на группы
* тесты исправлены для Pyramid 1.5:
Removed the ability to influence and query a pyramid.request.Request object as if it were a dictionary. Previously it was possible to use methods like __getitem__, get, items, and other dictlike methods to access value


Обновление sacrud. Версия 0.1.1

  
Код: https://github.com/uralbash/sacrud
Описание: http://sacrud.readthedocs.org/

Что нового?
* в расширении для pyramid параметр "sacrud_models" переименован в "sacrud.models"
* "sacrud.models" теперь словарь, а не список:
    settings['sacrud.models'] = {
'Company': [Company, User, EmployeeType],
'Auth': [Group, GroupPermission, UserGroup,
GroupResourcePermission, Resource, UserPermission,
UserResourcePermission, ExternalIdentity],
'': [Company]
}
* в словаре можно поделить модели на группы
* тесты исправлены для Pyramid 1.5:
Removed the ability to influence and query a pyramid.request.Request object as if it were a dictionary. Previously it was possible to use methods like __getitem__, get, items, and other dictlike methods to access value


Запись в БД через sacrud используя SQLAlchemy session.

Для простых CRUD действий с БД, можно воспользоваться модулем action из sacrud. Это немного сократит код и добавит некоторой универсальности в ПО со сложной логикой.

from sacrud import actions
from models import (
    DBSession,
    TestTable,
)

hstore_data = str({'param1': 'bla bla bla',
            'param2': 'bla bla bla2',
            'param3': '7389a498-9347-48e3-835d-c3900dcd2566',
            'patam4': 'dddddddd'})

param = {'value': ('123',),
         'description': ('test description',),
         'myhash': [hstore_data, ],
        }
# записывает транзакцию в БД
action.create(DBSession, TestTable, param)

параметры в виде списка сделаны для того что бы можно было принимать множественные значения поля с HTML формы.


Запись в БД через sacrud используя SQLAlchemy session.

Для простых CRUD действий с БД, можно воспользоваться модулем action из sacrud. Это немного сократит код и добавит некоторой универсальности в ПО со сложной логикой.

from sacrud import action
from models import (
DBSession,
TestTable,
)

hstore_data = str({'param1': 'bla bla bla',
'param2': 'bla bla bla2',
'param3': '7389a498-9347-48e3-835d-c3900dcd2566',
'patam4': 'dddddddd'})

param = {'value': ('123',),
'description': ('test description',),
'myhash': [hstore_data, ],
}
# записывает транзакцию в БД
action.create(DBSession, TestTable, param)

параметры в виде списка сделаны для того что бы можно было принимать множественные значения поля с HTML формы.

UPD: в новой версии можно делать так:

param = {'value': '123',
'description': 'test description',
'myhash': hstore_data,
}
# запис