Toggle navigation

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

Введение

В этом документе описан API, используемый для обновления базы данных Odoo до более высокой версии.

Он позволяет обновить базу данных без повторной отправки html-формы на https://upgrade.odoo.com Хотя база данных будет следовать тому же процессу, который описан в этой форме.

Требуемые шаги:

  • : Ref: [UNKNOWN NODE title_reference]

  • : Ref: [UNKNOWN NODE title_reference]

  • : Ref: [UNKNOWN NODE title_reference]

  • : Ref: [UNKNOWN NODE title_reference]

  • : Ref: [UNKNOWN NODE title_reference]

Методы

Создание запроса на обновление базы данных

Это действие создает запрос базы данных со следующей информацией:

  • Ссылка на ваш контракт

  • Ваш адрес электронной почты:

  • Целевую версию (версию 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`` и `` [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

  • Метод `` request_sftp_access`` с использованием протокола SFTP

Метод `` upload``

Это самый простой и самый простой способ загрузки дампа базы данных. Он использует протокол HTTPS.

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

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}"

Метод `` request_sftp_access``

Этот метод рекомендуется для больших дампов базы данных. Он использует протокол SFTP и поддерживает возобновление.

Он создаст временный SFTP-сервер, к которому вы можете подключиться, и позволит вам загружать дамп базы данных с помощью SFTP-клиента.

https://upgrade.odoo.com/database/v1/request_sftp_access

Создает SFTP-сервер

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

Идентификатор запроса и закрытый ключ получают с помощью: ref: [UNKNOWN NODE title_reference]

Файл с открытыми ключами ssh должен быть примерно похож на стандартный файл `` authorized_keys``. Этот файл должен содержать только открытые ключи, пустые строки или комментарии (строки, начинающиеся с символа `` # [UNKNOWN NODE problematic]),

Ваш запрос на обновление базы данных должен находиться в состоянии `` draft``.

Метод `` request_sftp_access`` возвращает словарь JSON, содержащий следующие ключи:

  • Python
  • Bash
import os
import pycurl
from urllib import urlencode

UPLOAD_URL = "https://upgrade.odoo.com/database/v1/request_sftp_access"
SSH_KEYS="/path/to/your/authorized_keys"

fields = dict([
    ('request', '10534'),
    ('key', 'Aw7pItGVKFuZ_FOR3U8VFQ=='),
])
postfields = urlencode(fields)

c = pycurl.Curl()
c.setopt(pycurl.URL, UPLOAD_URL+"?"+postfields)
c.setopt(pycurl.POST, 1)
c.setopt(c.HTTPPOST,[("ssh_keys",
                        (c.FORM_FILE, SSH_KEYS,
                        c.FORM_CONTENTTYPE, "text/plain"))
                    ])

c.perform()
c.close()
REQUEST_SFTP_ACCESS_URL="https://upgrade.odoo.com/database/v1/request_sftp_access"
SSH_KEYS=/path/to/your/authorized_keys
KEY="Aw7pItGVKFuZ_FOR3U8VFQ=="
REQUEST_ID="10534"
URL_PARAMS="key=${KEY}&request=${REQUEST_ID}"

curl -sS "${REQUEST_SFTP_ACCESS_URL}?${URL_PARAMS}" -F ssh_keys=@${SSH_KEYS} > request_sftp_result.json

# check for failures
failures=$(cat request_sftp_result.json | jq -r '.failures[]')
if [ "$failures" != "" ]; then
  echo $failures | jq -r '.'
  exit 1
fi
Неисправности?

Список ошибок. Смотрите: ref: [UNKNOWN NODE title_reference] для объяснения словаря JSON, возвращенного в случае сбоя.

request

Если вызов выполнен успешно, значение, связанное с ключом * request [UNKNOWN NODE problematic], будет словарем, содержащим параметры подключения SFTP:

  • `` Hostname``: адрес хоста для соединения с

  • `` Sftp_port``: порт для подключения к

  • `` Sftp_user``: пользователь SFTP, который будет использоваться для подключения

  • `` Shared_file``: имя файла, которое вы должны использовать (идентичное значению файла `` filename``, которое вы использовали при создании запроса в: ref: [UNKNOWN NODE title_reference]).)

  • `` Request_id``: соответствующий идентификатор запроса обновления (только информативный, не требуемый для подключения)

  • `` Sample_command``: пример команды с использованием клиента sftp

Обычно вы можете подключиться с использованием команды sample как есть.

У вас будет доступ только к `` shared_file``. Никакие другие файлы не будут доступны, и вы не сможете создавать новые файлы в общей среде на сервере SFTP.

Использование клиента sftp

После успешного подключения с использованием SFTP-клиента вы можете загрузить дамп базы данных. Ниже приведен пример сеанса с использованием клиента sftp:

$ sftp -P 2200 user_10534@upgrade.odoo.com
Connected to upgrade.odoo.com.
sftp> put /path/to/openchs.70.cdump openchs.70.cdump
Uploading /path/to/openchs.70.cdump to /openchs.70.cdump
sftp> ls -l openchs.70.cdump
-rw-rw-rw-    0 0        0          849920 Aug 30 15:58 openchs.70.cdump

Если ваше соединение прервано, вы можете продолжить передачу файла, используя ключ командной строки `` -a``:

sftp> put -a /path/to/openchs.70.cdump openchs.70.cdump
Resuming upload of /path/to/openchs.70.cdump to /openchs.70.cdump

Если вы не хотите вводить команду вручную и вам необходимо автоматизировать обновление базы данных с помощью сценария, вы можете использовать пакетный файл или передать команды в 'sftp':

echo "put /path/to/openchs.70.cdump openchs.70.cdump" | sftp -b - -P 2200 user_10534@upgrade.odoo.com

Параметр `` -b`` принимает имя файла. Если имя файла `` [UNKNOWN NODE problematic], оно читает команды со стандартного ввода.

Запрос на обработку вашего запроса

Это действие просит платформу обновления обработать дамп базы данных.

Метод `` 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 "${STATUS_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"
    ]
  }
}

Загрузка дампа базы данных

Помимо загрузки перенесенной базы данных с использованием URL-адреса, предоставленного с помощью: ref: [UNKNOWN NODE title_reference], вы также можете использовать протокол SFTP, как описано в методе: ref: [UNKNOWN NODE problematic]request_sftp_access <upgrade-api- запрос-SFTP-доступ-метод> `

Разница заключается в том, что вы сможете загружать только перенесенную базу данных. Загрузка не будет возможна.

Запрос на обновление базы данных должен находиться в состоянии `` done``.

После успешного подключения с использованием SFTP-клиента вы можете загрузить дамп базы данных. Ниже приведен пример сеанса с использованием клиента sftp:

$ sftp -P 2200 user_10534@upgrade.odoo.com
Connected to upgrade.odoo.com.
sftp> get upgraded_openchs.70.cdump /path/to/upgraded_openchs.70.cdump
Downloading /upgraded_openchs.70.cdump to /path/to/upgraded_openchs.70.cdump