Struktura modułu
Nowy moduł można łatwo stworzyć poleceniem:
odoo-bin scaffold <nazwa modułu>
To polecenie zakłada wszystkie katalogi i wzory plików.
Strukturę opisuje dwa pliki:
__manifest__.py – opis parametrów
__init__.py – ładowanie modułów Pythona w czasie uruchomienia.
https://www.odoo.com/documentation/10.0/reference/module.html#manifest – struktura pliku __manifest__.py, opisującego moduł.
W manifeście podaje się (element data) pliki xml, które mają zostać przeanalizowane i wczytane do bazy danych (w czasie instalacji).
W __init__ podaje się najczęściej nazwy katalogów w których umieszcza się tematycznie zgrupowane moduły. W każdym katalogu tworzy się plik __init__.py z poleceniami import dla poszczególnych modułów.
Wygląd typowego (zalecanego) drzewa katalogów (zobacz też rysunek http://odootechnical.com/odoo-module-structure/):
├───controllers # kontrolery (zgodnie z zasadą MVC).
├───data # Dane (XML) wczytywane do tabel.
├───demo # Dane demonstracyjne i testowe.
├───doc # Dokumentacja techniczna.
├───i18n # Pliki tłumaczeń (.po).
├───models # Modele (zgodnie z MVC i ORM).
├───report # Definicje raportów.
├───security # Prawa dostępu.
├───static # Pliki statyczne.
│ ├───description # Opis widoczny w funkcji zarządzania modułami.
│ ├───lib # Biblioteki (obce moduły).
│ └───src # Pliki źródłowe do budowy/wyglądu stron.
│ ├───css # arkusze styli.
│ ├───img # Images Grafiki.
│ ├───js # skrypty Javascript.
│ └───xml # wzorce XML / web design.
├───test # Automatyczne testy (YAML).
├───tests # Testy w Pythonie.
├───views # Widoki (zgodnie z MVC), menu i akcje definiowane w XML.
└────wizard # Kreatory (Wizards) do interakcji/pobierania danych od użytkownika.
W głównym katalogu modułu obowiązkowo znajdują się dwa pliki:
__manifest__.py # Manifest. Struktura Pythona opisująca moduł (dawniej __openerp__.py).
__init__.py # Plik importujący podkatalogi (inicjowanie modułu)
Manifest
Kompletny opis znajdziesz w https://github.com/sotogarcia/odoo-development/wiki/Manifest-file (zob. też https://github.com/OCA/maintainer-tools/blob/master/template/module/__openerp__.py, http://odoo-80.readthedocs.org/en/latest/reference/module.html).
# -*- coding: utf-8 -*-
{
'name' : 'module_name',
'summary' : 'short_description',
'version' : '1.0',
'description' : "reStructuredText_description",
'author' : 'author_name',
'website' : 'author_website',
'license' : 'AGPL-3',
'category' : 'Uncategorized',
'depends' : [ 'base' ],
'data' : [
'security/module_name.xml',
'security/ir.model.access.csv'
],
'demo' : ['demo/demo.xml'],
'auto_install' : False,
<!-- undocumented -->
'maintainer': 'OpenERP SA',
'website': 'https://www.domain.com',
'url': 'http://launchpad.net/openerp-costa-rica',
'contributors': [ 'Nombre Mostrado <nombre@dominio.com>' ],
'application': True,
'installable': True,
'active': False,
'sequence': 10,
"certificate": False,
'complexity': 'easy',
'css': [ 'static/src/css/style.css' ],
'js': [ 'static/src/css/script.js' ],
'images': [ 'images/src/img/image.png' ],
'icon': 'static/src/img/icon.png',
'qweb': [ 'static/src/xml/wzorzec.xml' ],
'test': [ 'test/test_file.yml' ],
'init_xml': [ 'data/account.account.type.csv' ],
'external_dependencies' : { 'python' : ['ldap'] },
}
To co najważniejsze wyliczono poniżej
name
Nazwa modułu
summary
Krótki opis.
category
Jedna z kategorii:
Accounting
Discuss
Document Management
eCommerce
Human Resources
Industries
Localization
Manufacturing
Marketing
Point of Sale
Productivity
Project
Purchases
Sales
Warehouse
Website
Extra Tools
version
Wersja. Zazwyczaj stosuje się numerację zgodną z wersją Odoo dla której moduł jest przeznaczony.
website
Strona internetowa modułu
license
Licencja. Zalecanie licencje:
"GPL-3"
for odoo 8.0 and below"LGPL-3"
for odoo 9.0 and above
Dla modułów z repozytorium otwartego OCA's stosuje się "AGPL-3"
.
external_dependencies
Zależności zewnętrzne - na przykład wymagane biblioteki Pythona:
"external_dependencies": {"python" : ["openid"]}