- PVSM.RU - https://www.pvsm.ru -
В этой части рассматривается структура именования методов, работа с пользователями и группами, установка дополнительных модулей.
Часть 1: Установка tryotnd, структура запросов, работа с БД [1]
Часть 2: Структура методов, работа с пользователями и группами, установка модулей [2]
Часть 3: Работа с модулями компании(company) и контрагентами(party)
Часть 4: Работа с модулями товаров(product) и склада(stock)
Список методов сервера мы получили, теперь разберемся как они строятся и за что отвечают.
Названия методов строятся достаточно просто и имеют такой вид:
%имя_основного_класса%.%имя_класса%.%имя_метода%.
Вот только разрабочики tryton переопределяют имена класов, в основном так — %имя_модуля%.%имя_класса%, реже %имя_модуля%.%имя_класса%.%логический_подкласс%. К примеру: model.res.user.create и model.stock.shipment.in.create.
Итого, названия методов имеют такой вид:
%имя_основного_класса%.%имя_модуля%.%имя_класса%.%логический_подкласс%.%имя_метода%.
У tryton есть 5 основных классов:
Методы common и system были рассмотрены в предыдущей части. Про методы report и wizard будут отдельные статьи, в этой части рассмотрим model.
trytond поставляется с 3 встроенными модулями:
Вот картинка для наглядности имеющихся классов у этих модулей:
Модуль res позволяет работать с пользователями и группами. Ниже представлено API для работы c пользователями. Для работы с группами достаточно в названиях методов заменить user на group. Что бы добавить пользователя в группу надо при создании или редактировании пользователя в поле groups задать id необходимых групп.
Название метода | Параметры | Описание |
---|---|---|
model.res.user.search | [user_id, cookie, [], start, end, null, {}] | Возвращает срез списка id существующих пользователей(id[start:end]). |
model.res.user.fields_get | [user_id, cookie, [], {}] | Возвращает список имеющихся у пользователя полей(e-mail, отдел, адресс и т.д.). |
model.res.user.read | [user_id, cookie, list_of_user_ids, list_of_field_names, {}] | Возвращает значения заданных полей заданных юзеров. |
model.res.user.create | [user_id, cookie, [{field_name: field_data, field_name: field_data, ...}], {}] | Создать пользователя, минимум необходимо задать поля name, login, pass. |
model.res.user.delete | [user_id, cookie, list_delete_user_ids, {}] | Удаляет пользователей по id. |
model.res.user.write | [user_id, cookie, list_update_user_ids, [{field_name: field_data, field_name: field_data, ...}], {}] | Изменяет значения полей пользователей по id. |
import json
import requests
url = 'http://localhost:8000/try'
id = 1
methodname = 'common.server.login'
params = ('test', 'test')
request = json.dumps({
'id': id,
'method': methodname,
'params': params,
})
r = requests.post(url, data=request)
user_id, cookie = r.json()['result']
print user_id, cookie
id = 2
methodname = 'model.res.user.search'
params = [user_id, cookie, [], 0, 1000, None, {}]
request = json.dumps({
'id': id,
'method': methodname,
'params': params,
})
r = requests.post(url, data=request)
print request
print r.json()
id = 3
methodname = 'model.res.user.fields_get'
params = [user_id, cookie, [], {}]
request = json.dumps({
'id': id,
'method': methodname,
'params': params,
})
r = requests.post(url, data=request)
print request
print r.json()
id = 4
methodname = 'model.res.user.read'
params = (user_id, cookie, [1, 3], ['active', 'login', 'name', 'sessions', 'rec_name', '_timestamp'], {})
request = json.dumps({
'id': id,
'method': methodname,
'params': params,
})
r = requests.post(url, data=request)
print request
print r.json()
id = 6
methodname = 'model.res.user.create'
params = [user_id, cookie, [{"name": "fullName1", "language": None, "menu": 2, "company": None, "actions": [], "active": True, "rule_groups": [], "main_company": None, "groups": [], "signature": "", "employee": None, "employees": [], "login": "login2", "password": "pass"}], {}]
params_min = [user_id, cookie, [{"name": "fullName2", "login": "login3", "password": "pass"}], {}]
request = json.dumps({
'id': id,
'method': methodname,
'params': params_min,
})
r = requests.post(url, data=request)
print request
print r.json()
id = 7
methodname = 'model.res.user.delete'
params = [user_id, cookie, [8, 10], {}]
request = json.dumps({
'id': id,
'method': methodname,
'params': params,
})
r = requests.post(url, data=request)
print request
print r.json()
id = 8
methodname = 'model.res.user.write'
params = [user_id, cookie, [8], {"email": "i2@mail.ru"}, {}]
request = json.dumps({
'id': id,
'method': methodname,
'params': params,
})
r = requests.post(url, data=request)
print request
print r.json()
У модуля ir функционала выше крыше, в данной части мы рассмотрим только функционал касающийся установки дополнительных модулей.
Для установки доп. модуля необходимо его скачать, распаковать в trytond/modules и переименовать распакованную папку в название модуля. На официальном сайте предлагают скачивать с PyPi [3], после распаковки мы получим папку trytond_%module_name%-%module_version% переименовуем её оставляя только %module_name%. Изучяя исходники, я в одном из setup.py наткнулся на ссылку репозитория модулей tryton [4], тут гараздо удобнее скачивать. При распаковке получаем папку %module_name%-%module_revision%, опять же оставляем только %module_name%.
Ниже API для работы с модулями. Хотя я бы порекомендовал делать устанвку модулей через gtk-клиент. Так же в API нашелся метод для удаления модулей, но через gtk-клиент удалить модуль нельзя, а на irc-канале разработчиков написано, что удалние модулей очень сложная и нетривиальная процедура. Так что пользуйтесь удалением модулей с большой осторожностью.
Название метода | Параметры | Описание |
---|---|---|
model.ir.module.module.search | [user_id, cookie, [], start, end, null, {}] | Возвращает срез списка id существующих модулей(id[start:end]). |
model.ir.module.module.fields_get | [user_id, cookie, [], {}] | Возвращает список имеющихся у модулей полей. |
model.ir.module.module.read | [user_id, cookie, list_of_module_ids, list_of_field_names, {}] | Возвращает значения заданных полей заданных модулей. |
model.ir.module.module.install | [user_id, cookie, list_module_ids, {}] | Устанавливает модуль по id. |
model.ir.module.module.upgrade | [user_id, cookie, list_module_ids, {}] | Обновляет модуль по id. |
model.ir.module.module.uninstall | [user_id, cookie, list_module_ids, {}] | Удаляет модуль по id. |
import json
import requests
url = 'http://localhost:8000/try'
id = 1
methodname = 'common.server.login'
params = ('test', 'test')
request = json.dumps({
'id': id,
'method': methodname,
'params': params,
})
r = requests.post(url, data=request)
user_id, cookie = r.json()['result']
id = 2
methodname = 'model.ir.module.module.search'
params = [user_id, cookie, [], 0, 1000, None, {}]
request = json.dumps({
'id': id,
'method': methodname,
'params': params,
})
r = requests.post(url, data=request)
print request
print r.json()
id = 3
methodname = 'model.ir.module.module.fields_get'
params = [user_id, cookie, [], {}]
request = json.dumps({
'id': id,
'method': methodname,
'params': params,
})
r = requests.post(url, data=request)
print request
print r.json()
id = 4
methodname = 'model.ir.module.module.read'
params = (user_id, cookie, [8, 10], ['name', 'rec_name'], {})
request = json.dumps({
'id': id,
'method': methodname,
'params': params,
})
r = requests.post(url, data=request)
print request
print r.json()
id = 5
methodname = 'model.ir.module.module.upgrade'
params = [user_id, cookie, [8, 10], {}]
request = json.dumps({
'id': id,
'method': methodname,
'params': params,
})
r = requests.post(url, data=request)
print request
print r.json()
P.S. До конца недели опубликую часть 3 и 4.
Автор: clutcher
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/60918
Ссылки в тексте:
[1] Часть 1: Установка tryotnd, структура запросов, работа с БД: http://habrahabr.ru/post/222121/
[2] Часть 2: Структура методов, работа с пользователями и группами, установка модулей: http://habrahabr.ru/post/221887/
[3] PyPi: http://pypi.python.org/pypi?:action=browse&show=all&c=551
[4] репозитория модулей tryton: http://hg.tryton.org/modules/
Нажмите здесь для печати.