Введение
В этом документе описан API, используемый для обновления базы данных Odoo до более высокой версии.
Он позволяет обновить базу данных без повторной отправки html-формы на https://upgrade.odoo.com Хотя база данных будет следовать тому же процессу, который описан в этой форме.
Требуемые шаги:
Создание запроса
Загрузка дампа базы данных
Запуск процесса обновления
Получение статуса запроса к базе данных
Загрузка обновленного дампа базы данных
Методы
Создание запроса на обновление базы данных
Это действие создает запрос базы данных со следующей информацией:
Ссылка на ваш контракт
Ваш адрес электронной почты:
Целевую версию (версию Odoo, которую вы хотите обновить)
Цель вашего запроса (тест или производство)
Имя дампа базы данных (обязательное, но чисто информативное)
Необязательно часовой пояс сервера (для версии исходного кода Odoo <6.1)
Метод `` create``
https://upgrade.odoo.com/database/v1/create
Создает запрос на обновление базы данных
- contract (
str
) -- (Обязательно). - email (
str
) -- (Обязательно) ваш адрес электронной почты - target (
str
) -- (Обязательно) версию Odoo, которую вы хотите обновить. Допустимые значения: 6.0, 6.1, 7.0, 8.0 - aim (
str
) -- (Обязательно) цель вашего запроса базы данных обновления. Действительные выборы: тест, производство. - filename (
str
) -- (Обязательно) чисто информативное имя для вас файл дампа базы данных - timezone (
str
) -- (Необязательно) часовой пояс, используемый вашим сервером. Только для исходной версии Odoo <6.1
Метод * create * возвращает словарь json, содержащий следующие ключи:
Неисправности?
Список ошибок.
Список словарей, каждый из которых содержит информацию об одной конкретной ошибке. Каждый словарь может содержать различные ключи в зависимости от типа ошибки, но вы всегда получите ключи * reason * и * message [UNKNOWN NODE problematic]:
`` Reason``: тип ошибки
`` Message``: человеческое приветствие
Некоторые возможные клавиши:
`` Code``: неверное значение
`` Значение``: ошибочное значение
`` Expected``: список допустимых значений
См. Пример вывода в сторону.
- JSON
{
"failures": [
{
"expected": [
"6.0",
"6.1",
"7.0",
"8.0",
],
"message": "Invalid value \"5.0\"",
"reason": "TARGET:INVALID",
"value": "5.0"
},
{
"code": "M123456-abcxyz",
"message": "Can not find contract M123456-abcxyz",
"reason": "CONTRACT:NOT_FOUND"
}
]
}
request
Если метод * create * будет успешным, значение, связанное с ключом * request [UNKNOWN NODE problematic], будет словарем, содержащим различную информацию о созданном запросе:
Наиболее важные клавиши:
`` Id``: идентификатор запроса
`` Key``: ваш личный ключ для этого запроса
Эти 2 значения будут запрошены другими способами (загрузка, обработка и статус)
Другие ключи будут объяснены в разделе, описывающем: ref: [UNKNOWN NODE title_reference].
Пример скрипта
Вот два примера создания запроса на обновление базы данных с использованием:
Один на языке программирования python, используя библиотеку pycurl
Один в языке программирования bash, используя [UNKNOWN NODE title_reference] _ (инструмент для передачи данных с использованием http) и [UNKNOWN NODE title_reference] _ (JSON процессор):
- Python
- Bash
from urllib import urlencode
from io import BytesIO
import pycurl
import json
CREATE_URL = "https://upgrade.odoo.com/database/v1/create"
CONTRACT = "M123456-abcdef"
AIM = "test"
TARGET = "8.0"
EMAIL = "john.doe@example.com"
FILENAME = "db_name.dump"
fields = dict([
('aim', AIM),
('email', EMAIL),
('filename', DB_SOURCE),
('contract', CONTRACT),
('target', TARGET),
])
postfields = urlencode(fields)
c = pycurl.Curl()
c.setopt(pycurl.URL, CREATE_URL)
c.setopt(c.POSTFIELDS, postfields)
data = BytesIO()
c.setopt(c.WRITEFUNCTION, data.write)
c.perform()
# transform output into a dict:
response = json.loads(data.getvalue())
# get http status:
http_code = c.getinfo(pycurl.HTTP_CODE)
c.close()
CONTRACT=M123456-abcdef
AIM=test
TARGET=8.0
EMAIL=john.doe@example.com
FILENAME=db_name.dump
CREATE_URL="https://upgrade.odoo.com/database/v1/create"
URL_PARAMS="contract=${CONTRACT}&aim=${AIM}&target=${TARGET}&email=${EMAIL}&filename=${FILENAME}"
curl -sS "${CREATE_URL}?${URL_PARAMS}" > create_result.json
# check for failures
failures=$(cat create_result.json | jq -r '.failures[]')
if [ "$failures" != "" ]; then
echo $failures | jq -r '.'
exit 1
fi
Загрузка дампа базы данных
Это действие загрузит дамп базы данных.
Метод `` upload``
https://upgrade.odoo.com/database/v1/upload
Загружает дамп базы данных
Идентификатор запроса и закрытый ключ получают с помощью: ref: [UNKNOWN NODE title_reference]
Результатом является словарь json, содержащий список `` сбоев``, который должен быть пустым, если все прошло хорошо.
- Python
- Bash
import os
import pycurl
from urllib import urlencode
from io import BytesIO
import json
UPLOAD_URL = "https://upgrade.odoo.com/database/v1/upload"
DUMPFILE = "openchs.70.cdump"
fields = dict([
('request', '10534'),
('key', 'Aw7pItGVKFuZ_FOR3U8VFQ=='),
])
headers = {"Content-Type": "application/octet-stream"}
postfields = urlencode(fields)
c = pycurl.Curl()
c.setopt(pycurl.URL, UPLOAD_URL+"?"+postfields)
c.setopt(pycurl.POST, 1)
filesize = os.path.getsize(DUMPFILE)
c.setopt(pycurl.POSTFIELDSIZE, filesize)
fp = open(DUMPFILE, 'rb')
c.setopt(pycurl.READFUNCTION, fp.read)
c.setopt(
pycurl.HTTPHEADER,
['%s: %s' % (k, headers[k]) for k in headers])
c.perform()
c.close()
UPLOAD_URL="https://upgrade.odoo.com/database/v1/upload"
DUMPFILE="openchs.70.cdump"
KEY="Aw7pItGVKFuZ_FOR3U8VFQ=="
REQUEST_ID="10534"
URL_PARAMS="key=${KEY}&request=${REQUEST_ID}"
HEADER="Content-Type: application/octet-stream"
curl -H $HEADER --data-binary "@${DUMPFILE}" "${UPLOAD_URL}?${URL_PARAMS}"
Запрос на обработку вашего запроса
Это действие просит платформу обновления обработать дамп базы данных.
Метод `` process``
https://upgrade.odoo.com/database/v1/process
Обработка дампа базы данных
Идентификатор запроса и закрытый ключ получают с помощью: ref: [UNKNOWN NODE title_reference]
Результатом является словарь json, содержащий список `` сбоев``, который должен быть пустым, если все прошло хорошо.
- Python
- Bash
from urllib import urlencode
from io import BytesIO
import pycurl
import json
PROCESS_URL = "https://upgrade.odoo.com/database/v1/process"
fields = dict([
('request', '10534'),
('key', 'Aw7pItGVKFuZ_FOR3U8VFQ=='),
])
postfields = urlencode(fields)
c = pycurl.Curl()
c.setopt(pycurl.URL, PROCESS_URL)
c.setopt(c.POSTFIELDS, postfields)
data = BytesIO()
c.setopt(c.WRITEFUNCTION, data.write)
c.perform()
# transform output into a dict:
response = json.loads(data.getvalue())
# get http status:
http_code = c.getinfo(pycurl.HTTP_CODE)
c.close()
PROCESS_URL="https://upgrade.odoo.com/database/v1/process"
KEY="Aw7pItGVKFuZ_FOR3U8VFQ=="
REQUEST_ID="10534"
URL_PARAMS="key=${KEY}&request=${REQUEST_ID}"
curl -sS "${PROCESS_URL}?${URL_PARAMS}"
Получение статуса запроса
Это действие запрашивает статус вашего запроса на обновление базы данных.
Метод `` status``
https://upgrade.odoo.com/database/v1/status
Запросить статус запроса на обновление базы данных
Идентификатор запроса и закрытый ключ получают с помощью: ref: [UNKNOWN NODE title_reference]
Результатом является словарь json, содержащий различную информацию о вашем запросе на обновление базы данных.
- Python
- Bash
from urllib import urlencode
from io import BytesIO
import pycurl
import json
STATUS_URL = "https://upgrade.odoo.com/database/v1/status"
fields = dict([
('request', '10534'),
('key', 'Aw7pItGVKFuZ_FOR3U8VFQ=='),
])
postfields = urlencode(fields)
c = pycurl.Curl()
c.setopt(pycurl.URL, PROCESS_URL)
c.setopt(c.POSTFIELDS, postfields)
data = BytesIO()
c.setopt(c.WRITEFUNCTION, data.write)
c.perform()
# transform output into a dict:
response = json.loads(data.getvalue())
c.close()
STATUS_URL="https://upgrade.odoo.com/database/v1/status"
KEY="Aw7pItGVKFuZ_FOR3U8VFQ=="
REQUEST_ID="10534"
URL_PARAMS="key=${KEY}&request=${REQUEST_ID}"
curl -sS "${PROCESS_URL}?${URL_PARAMS}"
Пример вывода
Ключ `` request`` содержит различную полезную информацию о вашем запросе:
id
Идентификатор запроса
- Ключ
Ваш личный ключ
- Эл. адрес
Адрес электронной почты, который вы указали при создании запроса
target
Целевая версия Odoo, которую вы указали при создании запроса
- целью
Цель (тест, производство) запроса на обновление базы данных, который вы указали при создании запроса
filename
Имя файла, которое вы указали при создании запроса.
- Часовой пояс
Часовой пояс, который вы указали при создании запроса.
state
Состояние вашего запроса
- `` issue_stage``
Этап проблемы, которую мы создали на главном сервере Odoo
- Проблема
Идентификатор проблемы, которую мы создали на главном сервере Odoo
- `` Status_url``
URL-адрес для доступа к запросу на обновление базы данных html-страницы
- `` Notes_url``
URL-адрес для получения заметок о обновлении базы данных
- `` Original_sql_url``
URL-адрес, используемый для получения загруженной (не обновленной) базы данных в виде потока SQL
- `` Original_dump_url``
URL-адрес, используемый для получения загруженной (не обновленной) базы данных в виде файла архива
- `` Upgraded_sql_url``
URL-адрес, используемый для получения обновленной базы данных в виде потока SQL
- `` Upgraded_dump_url``
URL-адрес, используемый для получения обновленной базы данных в виде файла архива
- `` Modules_url``
URL-адрес, используемый для получения пользовательских модулей
- Размер файла
Размер файла загруженной базы данных
- `` database_uuid``
Уникальный идентификатор вашей базы данных
- `` Created_at``
Дата создания запроса;
- Приблизительное время:
Оценка времени, необходимого для обновления базы данных
- `` processed_at``
Время начала обновления базы данных
- `` Elapsed``
Время, необходимое для обновления базы данных
- `` Filestore``
Ваши вложения были преобразованы в файл-архив
- `` Customer_message``
Важное сообщение, связанное с вашим запросом
- Версия базы данных:
Угаданная версия Одо вашей загруженной (не обновленной) базы данных
- `` postgresql``
Угаданный Postgresql-версия загруженной (не обновленной) базы данных
- `` Compressions``
Методы сжатия, используемые вашей загруженной базой данных
- JSON
{
"failures": [],
"request": {
"id": 10534,
"key": "Aw7pItGVKFuZ_FOR3U8VFQ==",
"email": "john.doe@example.com",
"target": "8.0",
"aim": "test",
"filename": "db_name.dump",
"timezone": null,
"state": "draft",
"issue_stage": "new",
"issue": 648398,
"status_url": "https://upgrade.odoo.com/database/eu1/10534/Aw7pItGVKFuZ_FOR3U8VFQ==/status",
"notes_url": "https://upgrade.odoo.com/database/eu1/10534/Aw7pItGVKFuZ_FOR3U8VFQ==/upgraded/notes",
"original_sql_url": "https://upgrade.odoo.com/database/eu1/10534/Aw7pItGVKFuZ_FOR3U8VFQ==/original/sql",
"original_dump_url": "https://upgrade.odoo.com/database/eu1/10534/Aw7pItGVKFuZ_FOR3U8VFQ==/original/archive",
"upgraded_sql_url": "https://upgrade.odoo.com/database/eu1/10534/Aw7pItGVKFuZ_FOR3U8VFQ==/upgraded/sql",
"upgraded_dump_url": "https://upgrade.odoo.com/database/eu1/10534/Aw7pItGVKFuZ_FOR3U8VFQ==/upgraded/archive",
"modules_url": "https://upgrade.odoo.com/database/eu1/10534/Aw7pItGVKFuZ_FOR3U8VFQ==/modules/archive",
"filesize": "912.99 Kb",
"database_uuid": null,
"created_at": "2015-09-09 07:13:49",
"estimated_time": null,
"processed_at": null,
"elapsed": "00:00",
"filestore": false,
"customer_message": null,
"database_version": null,
"postgresql": "9.4",
"compressions": [
"pgdmp_custom",
"sql"
]
}
}