Створення модуля

Перш ніж створювати свій перший модуль, необхідно створити проєкт Odoo.sh і знати URL-адресу вашого репозиторію GitHub.

Глосарій

  • ~/src — це каталог, де розташовані репозиторії Git, пов’язані з вашими проєктами Odoo.

  • odoo — це користувач GitHub.

  • odoo-addons — це репозиторій GitHub.

  • feature-1 — це назва гілки розробки.

  • main — це назва виробничої гілки.

  • my_module — це назва модуля.

Замініть їх за необхідності.

Створення гілки розробки

З виду гілок:

  • На панелі навігації гілок натисніть кнопку + (Нова гілка розробки) поруч із Development.

  • У розділі Fork виберіть гілку main.

  • У розділі To введіть feature-1.

Розгалуження робочої гілки для створення гілки розробки на Odoo.sh

Після того, як збірка буде готова, ви зможете отримати доступ до редактора та коду вашої гілки розробки з папки ~/src/user.

Створення структури модуля

Створення каркасу

Хоча це не обов’язково, створення каркасу дозволяє уникнути рутинної роботи зі встановленням базової структури модуля Odoo. Ви можете створити каркас нового модуля за допомогою виконуваного файлу odoo-bin.

З терміналу редактора виконайте:

odoo-bin scaffold my_module ~/src/user/

Порада

Якщо ви не хочете встановлювати Odoo на свій комп’ютер, ви також можете завантажити цей шаблон структури модуля. Замініть кожне входження my_module на назву на ваш вибір.

Буде створено таку структуру:

my_module
├── __init__.py
├── __manifest__.py
├── controllers
│   ├── __init__.py
│   └── controllers.py
├── demo
│   └── demo.xml
├── models
│   ├── __init__.py
│   └── models.py
├── security
│   ├── ir.model.access.csv
│   └── models.py
└── views
    ├── templates.xml
    └── views.xml

Попередження

Використовуйте лише буквено-цифрові символи (a-z, 0-9) або підкреслення (_) під час найменування модуля, оскільки його назва використовується для класів Python, а імена класів, що містять спеціальні символи, крім підкреслень, є недійсними в Python.

Видаліть коментарі з таких файлів:

  • models/models.py приклад моделі з її полями

  • views/views.xml вигляд дерева та форми з меню, що їх відкривають

  • demo/demo.xml демонстраційні записи для прикладу моделі

  • controllers/controllers.py приклад контролера, що реалізує деякі маршрути

  • views/templates.xml два приклади qweb представлень, які використовуються маршрутами контролера

  • __manifest__.py маніфест вашого модуля, включаючи його назву, опис та файли даних для завантаження. Розкоментуйте файл даних списку контролю доступу:

    # 'security/ir.model.access.csv',
    

Вручну

Щоб створити структуру модуля вручну, дотримуйтесь інструкцій у Server framework 101, щоб зрозуміти структуру модуля та вміст кожного файлу.

Надсилання до гілки розробки

  1. Додайте зміни для фіксації, виконавши:

    git add my_module
    
  2. Зафіксуйте свої зміни, виконавши:

    git commit -m "My first module"
    
  3. Надішліть свої зміни до віддаленого репозиторію, виконавши:

    З терміналу редактора виконайте:

    git push https HEAD:feature-1
    

Тестування модуля

Гілка має з’явитися в розділі Розробка навігаційної панелі перегляду гілок.

Приклад гілки розробки

Клацніть назву гілки, щоб переглянути її історію, включаючи зміни, які ви щойно надіслали. Коли база даних буде готова, клацніть Підключитися, щоб отримати до неї доступ.

Кнопка підключення для доступу до бази даних

Якщо ваш проект Odoo.sh налаштовано на автоматичне встановлення модуля, він з’явиться безпосередньо на дашборді бази даних. В іншому випадку він буде доступний для встановлення в програмі Програми.

Новий модуль на дашборді бази даних

Тестування з виробничими даними

Примітка

Для цього кроку потрібна виробнича база даних. Якщо у вас її ще немає, створіть її.

Після того, як ви протестували модуль у збірці розробки з демонстраційними даними і вважаєте, що він готовий, ви можете протестувати його з виробничими даними, використовуючи проміжну гілку.

Ви можете:

  • Перетворіть вашу гілку розробки на проміжну гілку, перетягнувши її в розділ Staging.

  • Об’єднайте її з наявною проміжною гілкою, перетягнувши її на цю гілку.

  • Використовуйте команду git merge для об’єднання ваших гілок.

Це створює нову проміжну збірку, яка дублює виробничу базу даних і запускає її на сервері, оновленому останніми змінами з вашої гілки.

Після готовності бази даних натисніть Connect, щоб отримати до неї доступ.

Встановіть модуль

Встановіть модуль з програми Apps. Оскільки модуль може не з’явитися безпосередньо у списку програм, оновіть список програм, активувавши режим розробника та натиснувши Update Apps List ‣ Update.

Примітка

Модуль не встановлюється автоматично, оскільки мета проміжної збірки полягає в тестуванні поведінки ваших змін так, як вони були б у виробничій базі даних, тому ви не хотіли б, щоб модуль встановлювався автоматично.

Розгортання у виробничому середовищі

Після того, як ви протестуєте модуль у проміжній гілці з виробничими даними і вважаєте, що він готовий до виробництва, ви можете об’єднати вашу гілку з виробничою гілкою:

  • Перетягніть проміжну гілку на виробничу гілку.

  • Використовуйте команду git merge для об’єднання ваших гілок.

Це об’єднує останні зміни з проміжної гілки у виробничу гілку та оновлює виробничий сервер з ними.

Після готовності бази даних натисніть Connect, щоб отримати до неї доступ.

Встановіть модуль

Встановіть модуль з програми Apps. Оскільки модуль може не з’явитися безпосередньо у списку програм, оновіть список програм, активувавши режим розробника та натиснувши Update Apps List ‣ Update.

Додавання зміни

У цьому розділі пояснюється, як додати зміну в ваш модуль, додавши нове поле в модель і розгорнувши його.

  1. З редактора або з вашого комп’ютера відкрийте папку модуля ~/src/odoo-addons/my_module, потім відкрийте файл models/models.py, щоб відредагувати його. Після поля опису:

    description = fields.Text()
    

    додайте поле datetime:

    start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
    
  2. Відкрийте файл views/views.xml і після:

    <field name="value2"/>
    

    додайте:

    <field name="start_datetime"/>
    
  3. Ці зміни змінюють структуру бази даних, додаючи стовпець до таблиці та змінюючи представлення. Щоб застосувати їх до наявної бази даних, наприклад вашої виробничої бази даних, ці зміни вимагають оновлення модуля. Якщо ви хочете, щоб оновлення виконувалося автоматично платформою Odoo.sh під час надсилання ваших змін, збільште версію модуля в його маніфесті, відкривши __manifest__.py і замінивши:

    'version': '0.1',
    

    з:

    'version': '0.2',
    

    Платформа виявить зміну версії та ініціює оновлення модуля після розгортання нової ревізії.

  4. Далі надішліть зміни.

  5. Після того, як ви протестували свої зміни, ви можете об’єднати їх з виробничою гілкою, наприклад, перетягнувши гілку на виробничу гілку в інтерфейсі Odoo.sh. Оскільки ви збільшили версію модуля в маніфесті, платформа автоматично оновить модуль, і ваше нове поле буде доступне негайно. В іншому випадку ви можете вручну оновити модуль у списку застосунків.

Використання зовнішньої бібліотеки Python

Якщо ви хочете використовувати зовнішню бібліотеку Python, яка не встановлена за замовчуванням, ви можете визначити файл requirements.txt, у якому перелічені зовнішні бібліотеки, від яких залежать ваші модулі. Платформа використовуватиме цей файл для автоматичного встановлення бібліотек Python, необхідних вашому проекту.

Примітка

  • Неможливо встановити або оновити системні пакети в базах даних Odoo.sh (наприклад, пакети apt). Однак за певних умов пакети можуть бути розглянуті для встановлення. Це також стосується модулів Python, які потребують системних пакетів для компіляції, та сторонніх модулів Odoo.

  • Розширення PostgreSQL не підтримуються в Odoo.sh, тому неможливо встановити розширення (такі як PostGIS, ltree тощо) в базах даних Odoo.sh.

Наприклад, щоб використовувати бібліотеку Unidecode у вашому модулі:

  1. Створіть файл requirements.txt у кореневій папці вашого репозиторію:

    • З редактора Odoo.sh створіть і відкрийте файл ~/src/user/requirements.txt.

    • З вашого комп’ютера створіть і відкрийте файл ~/src/odoo-addons/requirements.txt.

  2. Додайте до файлу:

    unidecode
    
  3. Тепер ви можете використовувати бібліотеку у вашому модулі, наприклад, для видалення акцентів із символів у полі назви вашої моделі. Для цього відкрийте файл models/models.py і перед:

    from odoo import models, fields, api
    

    додайте:

    from unidecode import unidecode
    
  4. Після:

    start_datetime = fields.Datetime('Start time', default=lambda self: fields.Datetime.now())
    

    додайте:

    @api.model
    def create(self, values):
        if 'name' in values:
            values['name'] = unidecode(values['name'])
        return super(my_module, self).create(values)
    
    def write(self, values):
        if 'name' in values:
            values['name'] = unidecode(values['name'])
        return super(my_module, self).write(values)
    
  5. Збільште версію модуля, щоб встановити залежність Python, відредагувавши маніфест модуля __manifest__.py.

  6. Потім надішліть зміни.

    Порада

    Додайте файл requirements.txt до індексу, виконавши команду git add requirements.txt.