Toggle navigation

API обновления - Odoo 8.0

Введение

В этом документе описан 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
Результат
Результат запроса
Тип результата
json dictionary

Метод * 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

Загружает дамп базы данных

Параметры
  • key (str) -- (Обязательно) ваш личный ключ
  • request (str) -- (Обязательно) ваш идентификатор запроса
Результат
Результат запроса
Тип результата
json dictionary

Идентификатор запроса и закрытый ключ получают с помощью: 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

Обработка дампа базы данных

Параметры
  • key (str) -- (Обязательно) ваш личный ключ
  • request (str) -- (Обязательно) ваш идентификатор запроса
Результат
Результат запроса
Тип результата
json dictionary

Идентификатор запроса и закрытый ключ получают с помощью: 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

Запросить статус запроса на обновление базы данных

Параметры
  • key (str) -- (Обязательно) ваш личный ключ
  • request (str) -- (Обязательно) ваш идентификатор запроса
Результат
Результат запроса
Тип результата
json dictionary

Идентификатор запроса и закрытый ключ получают с помощью: 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"
    ]
  }
}