Module Prototyper

module_prototyper
REPOSITORY
REPOSITORYOCA/server-tools
GIT
GIThttps://github.com/OCA/server-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-tools/tree/14.0/module_prototyper
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYOthers
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Pelayo Gómez
MAINTAINERS
MAINTAINERSSavoir-faire Linux
COMMITTERS
COMMITTERSEnric Tobella, OCA Transbot, oca-travis, Weblate, OCA-git-bot, oca-ci, hkapatel, oca-git-bot
WEBSITE
WEBSITEhttps://github.com/OCA/server-tools
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:06
ODOO DEPENDENCIES
ODOO DEPENDENCIES
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
module_prototyper_base_form_view Base form view for module prototypes module_prototyper form New
module_prototyper_base_tree_view Base tree View for module prototypes module_prototyper tree New
view_ir_model_fields_form view_ir_model_fields_form ir.model.fields field Inherits base.view_model_fields_form
view_ir_model_form view_ir_model_form ir.model xpath Inherits base.view_model_form
view_module_export_wizard Export Module module_prototyper.module.export form New
Models touched (4)

New fields (6)
  • client_context Char
    help='Context to use on the client side when handling the field (python dictionary)' args: 'Context'
  • column1 Char
    help="name of the column referring to 'these' records in the relation table" args: 'Column1'
  • column2 Char
    help="name of the column referring to 'those' records in the relation table" args: 'Column2'
  • helper Text
    args: 'Helper'
  • limit Integer
    help='Read limit' args: 'Read limit'
  • notes Text
    args: 'Notes to developers.'
Public methods (0)

No public methods.

New fields (23)
  • application Boolean
    default=False help='Check if the module is an Odoo application.' args: 'Application'
  • author Char
    help='Enter your name' required=True args: 'Author'
  • auto_install Boolean
    default=False help='Check if the module should be install by default.' args: 'Auto Install'
  • category_id Many2one → ir.module.category
    args: 'ir.module.category', 'Category'
  • data_ids Many2many → ir.filters
    help='The records matching the filters will be added as data.' args: 'ir.filters', 'prototype_data_rel', 'module_prototyper_id', 'filter_id', 'Data filters'
  • demo_ids Many2many → ir.filters
    help='The records matching the filters will be added as demo data.' args: 'ir.filters', 'prototype_demo_rel', 'module_prototyper_id', 'filter_id', 'Demo filters'
  • dependency_ids Many2many → ir.module.module
    help='Enter the list of required modules that need to be installed for your module to work properly' args: 'ir.module.module', 'module_prototyper_module_rel', 'module_prototyper_id', 'module_id', 'Dependencies'
  • description Text
    default=get_default_description help='Enter the description of your module, what it does, how to install, configure and use it, the roadmap or known issues. The description will be exported in README.rst' required=True args: 'Description'
  • field_ids Many2many → ir.model.fields
    help='Enter the list of fields that you have created or modified and want to export in this module. New models will be exported as long as you choose one of his fields.' args: 'ir.model.fields', 'prototype_fields_rel', 'module_prototyper_id', 'field_id', 'Fields'
  • group_ids Many2many → res.groups
    help='Enter the list of groups that you have created and want to export in this module.' args: 'res.groups', 'prototype_groups_rel', 'module_prototyper_id', 'group_id', 'Groups'
  • human_name Char
    help='The Module Name will be used as the displayed name of the exported module.' required=True args: 'Module Name'
  • icon_image Binary
    help='The icon set up here will be used as the icon for the exported module also' args: 'Icon'
  • license Selection
    default=licenses.AGPL3 string='License' args: [(licenses.GPL3, 'GPL Version 3'), (licenses.GPL3_L, 'GPL-3 or later version'), (licenses.LGPL3, 'LGPL-3'), (licenses.LGPL3_L, 'LGPL-3 or later version'), (licenses.AGPL3, 'Affero GPL-3'), (licenses.OSI, 'Other OSI Approved Licence'), ('Other proprietary', 'Other Proprietary')]
  • maintainer Char
    help='Enter the name of the person or organization who will maintain this module' args: 'Maintainer'
  • menu_ids Many2many → ir.ui.menu
    help='Enter the list of menu items that you have created and want to export in this module. Related windows actions will be exported as well.' args: 'ir.ui.menu', 'prototype_menu_rel', 'module_prototyper_id', 'menu_id', 'Menu Items'
  • name Char
    help='The technical name will be used to define the name of the exported module, the name of the model.' required=True args: 'Technical Name'
  • report_ids Many2many → ir.actions.report
    help='Enter the list of reports that you have created and want to export in this module.' args: 'ir.actions.report', 'prototype_report_rel', 'module_prototyper_id', 'report_id', 'Reports'
  • right_ids Many2many → ir.model.access
    help='Enter the list of access rights that you have created and want to export in this module.' args: 'ir.model.access', 'prototype_rights_rel', 'module_prototyper_id', 'right_id', 'Access Rights'
  • rule_ids Many2many → ir.rule
    help='Enter the list of record rules that you have created and want to export in this module.' args: 'ir.rule', 'prototype_rule_rel', 'module_prototyper_id', 'rule_id', 'Record Rules'
  • summary Char
    help='Enter a summary of your module' required=True args: 'Summary'
  • version Char
    default='14.0.1.0.0' help='Enter the version of your module with 5 digits' size=10 args: 'Version'
  • view_ids Many2many → ir.ui.view
    help='Enter the list of views that you have created and want to export in this module.' args: 'ir.ui.view', 'prototype_view_rel', 'module_prototyper_id', 'view_id', 'Views'
  • website Char
    help='Enter the URL of your website' args: 'Website'
Public methods (19)
  • fixup_arch(cls, archstr)
    @classmethod
  • fixup_domain(cls, domain)
    @classmethod
    Fix a domain according to unprefixing of fields
  • friendly_name(cls, name)
    @classmethod
  • generate_data_files(self)
    @api.model
    Generate data and demo files
  • generate_file_details(self, filename, template, **kwargs)
    @api.model
    generate file details from jinja2 template. :param filename: name of the file the content is related to :param template: path to the file to render the content :param kwargs: arguments of the template :return: File_details instance
  • generate_files(self)
    @api.model
    Generates the files from the details of the prototype. :return: tuple
  • generate_menus_details(self)
    @api.model
    Wrapper to generate the menus files.
  • generate_model_details(self, model, field_descriptions)
    @api.model
    Wrapper to generate the python file for the model. :param model: ir.model record. :param field_descriptions: list of ir.model.fields records. :return: FileDetails instance.
  • generate_models_details(self)
    @api.model
    Finds the models from the list of fields and generates the __init__ file and each models files (one by class).
  • generate_models_init_details(self, ir_models)
    @api.model
    Wrapper to generate the __init__.py file in models folder.
  • generate_module_init_file_details(self)
    @api.model
    Wrapper to generate the __init__.py file of the module.
  • generate_module_openerp_file_details(self)
    @api.model
    Wrapper to generate the __openerp__.py file of the module.
  • generate_views_details(self)
    @api.model
    Wrapper to generate the views files.
  • get_default_description(self)
    Extract the content of default description
  • is_prefixed(cls, name)
    @classmethod
  • save_icon(self)
    @api.model
    Save the icon of the prototype as a image. The image is used afterwards as the icon of the exported module. :return: FileDetails instance
  • set_field_descriptions(self)
    Mock the list of fields into dictionary. It allows us to add or change attributes of the fields. :return: None
  • setup_env(self, api_version)
    @api.model
    Set the Jinja2 environment. The environment will helps the system to find the templates to render. :param api_version: module_prototyper.api_version, odoo api :return: jinja2.Environment instance.
  • unprefix(cls, name)
    @classmethod

New fields (2)
  • manifest_file_name Char
  • name Char
Public methods (0)

No public methods.

New fields (4)
  • api_version Many2one → module_prototyper.api_version
    comodel_name='module_prototyper.api_version' default=_default_api_version required=True string='API version'
  • data Binary
    readonly=True args: 'File'
  • name Char
    readonly=True args: 'File Name'
  • state Selection
    default='choose' args: [('choose', 'choose'), ('get', 'get')]
Public methods (2)
  • action_export(self)
    Export a zip file containing the module based on the information provided in the prototype, using the templates chosen in the wizard.
  • zip_files(wizard, prototypes)
    @staticmethod
    Takes a set of file and zips them. :param file_details: tuple (filename, file_content) :return: tuple (zip_file, stringIO)
REPOSITORY
REPOSITORYOCA/server-tools
GIT
GIThttps://github.com/OCA/server-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-tools/tree/10.0/module_prototyper
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYOthers
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Onestein, Savoir-faire Linux, Sudokeys
MAINTAINERS
MAINTAINERSSavoir-faire Linux
COMMITTERS
COMMITTERSPedro M. Baeza, Stéphane Bidoul (ACSONE), OCA Transbot, Dave Lasley, oca-travis, Weblate
WEBSITE
WEBSITEhttp://www.savoirfairelinux.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:20:00
ODOO DEPENDENCIES
ODOO DEPENDENCIES
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
module_prototyper_base_form_view Base form view for module prototypes module_prototyper form New
module_prototyper_base_tree_view Base tree View for module prototypes module_prototyper tree New
view_ir_model_fields_form view_ir_model_fields_form ir.model.fields field Inherits base.view_model_fields_form
view_ir_model_form view_ir_model_form ir.model xpath Inherits base.view_model_form
view_module_export_wizard Export Module module_prototyper.module.export form New
Models touched (4)

New fields (6)
  • client_context Char
    help='Context to use on the client side when handling the field (python dictionary)' args: 'Context'
  • column1 Char
    help="name of the column referring to 'these' records in the relation table" args: 'Column1'
  • column2 Char
    help="name of the column referring to 'those' records in the relation table" args: 'Column2'
  • helper Text
    args: 'Helper'
  • limit Integer
    help='Read limit' args: 'Read limit'
  • notes Text
    args: 'Notes to developers.'
Public methods (0)

No public methods.

New fields (25)
  • activity_ids Many2many → workflow.activity
    help='Enter the list of workflow activities that you have created and want to export in this module' args: 'workflow.activity', 'prototype_wf_activity_rel', 'module_prototyper_id', 'activity_id', 'Activities'
  • application Boolean
    default=False help='Check if the module is an Odoo application.' args: 'Application'
  • author Char
    help='Enter your name' required=True args: 'Author'
  • auto_install Boolean
    default=False help='Check if the module should be install by default.' args: 'Auto Install'
  • category_id Many2one → ir.module.category
    args: 'ir.module.category', 'Category'
  • data_ids Many2many → ir.filters
    help='The records matching the filters will be added as data.' args: 'ir.filters', 'prototype_data_rel', 'module_prototyper_id', 'filter_id', 'Data filters'
  • demo_ids Many2many → ir.filters
    help='The records matching the filters will be added as demo data.' args: 'ir.filters', 'prototype_demo_rel', 'module_prototyper_id', 'filter_id', 'Demo filters'
  • dependency_ids Many2many → ir.module.module
    help='Enter the list of required modules that need to be installed for your module to work properly' args: 'ir.module.module', 'module_prototyper_module_rel', 'module_prototyper_id', 'module_id', 'Dependencies'
  • description Text
    default=get_default_description help='Enter the description of your module, what it does, how to install, configure and use it, the roadmap or known issues. The description will be exported in README.rst' required=True args: 'Description'
  • field_ids Many2many → ir.model.fields
    help='Enter the list of fields that you have created or modified and want to export in this module. New models will be exported as long as you choose one of his fields.' args: 'ir.model.fields', 'prototype_fields_rel', 'module_prototyper_id', 'field_id', 'Fields'
  • group_ids Many2many → res.groups
    help='Enter the list of groups that you have created and want to export in this module.' args: 'res.groups', 'prototype_groups_rel', 'module_prototyper_id', 'group_id', 'Groups'
  • human_name Char
    help='The Module Name will be used as the displayed name of the exported module.' required=True args: 'Module Name'
  • icon_image Binary
    help='The icon set up here will be used as the icon for the exported module also' args: 'Icon'
  • license Selection
    default=licenses.AGPL3 string='License' args: [(licenses.GPL3, 'GPL Version 3'), (licenses.GPL3_L, 'GPL-3 or later version'), (licenses.LGPL3, 'LGPL-3'), (licenses.LGPL3_L, 'LGPL-3 or later version'), (licenses.AGPL3, 'Affero GPL-3'), (licenses.OSI, 'Other OSI Approved Licence'), ('Other proprietary', 'Other Proprietary')]
  • maintainer Char
    help='Enter the name of the person or organization who will maintain this module' args: 'Maintainer'
  • menu_ids Many2many → ir.ui.menu
    help='Enter the list of menu items that you have created and want to export in this module. Related windows actions will be exported as well.' args: 'ir.ui.menu', 'prototype_menu_rel', 'module_prototyper_id', 'menu_id', 'Menu Items'
  • name Char
    help='The technical name will be used to define the name of the exported module, the name of the model.' required=True args: 'Technical Name'
  • report_ids Many2many → ir.actions.report.xml
    help='Enter the list of reports that you have created and want to export in this module.' args: 'ir.actions.report.xml', 'prototype_report_rel', 'module_prototyper_id', 'report_id', 'Reports'
  • right_ids Many2many → ir.model.access
    help='Enter the list of access rights that you have created and want to export in this module.' args: 'ir.model.access', 'prototype_rights_rel', 'module_prototyper_id', 'right_id', 'Access Rights'
  • rule_ids Many2many → ir.rule
    help='Enter the list of record rules that you have created and want to export in this module.' args: 'ir.rule', 'prototype_rule_rel', 'module_prototyper_id', 'rule_id', 'Record Rules'
  • summary Char
    help='Enter a summary of your module' required=True args: 'Summary'
  • transition_ids Many2many → workflow.transition
    help='Enter the list of workflow transitions that you have created and want to export in this module' args: 'workflow.transition', 'prototype_wf_transition_rel', 'module_prototyper_id', 'transition_id', 'Transitions'
  • version Char
    default='10.0.1.0.0' help='Enter the version of your module with 5 digits' size=10 args: 'Version'
  • view_ids Many2many → ir.ui.view
    help='Enter the list of views that you have created and want to export in this module.' args: 'ir.ui.view', 'prototype_view_rel', 'module_prototyper_id', 'view_id', 'Views'
  • website Char
    help='Enter the URL of your website' args: 'Website'
Public methods (19)
  • fixup_arch(cls, archstr)
    @classmethod
  • fixup_domain(cls, domain)
    @classmethod
    Fix a domain according to unprefixing of fields
  • friendly_name(cls, name)
    @classmethod
  • generate_data_files(self)
    @api.model
    Generate data and demo files
  • generate_file_details(self, filename, template, **kwargs)
    @api.model
    generate file details from jinja2 template. :param filename: name of the file the content is related to :param template: path to the file to render the content :param kwargs: arguments of the template :return: File_details instance
  • generate_files(self)
    @api.model
    Generates the files from the details of the prototype. :return: tuple
  • generate_menus_details(self)
    @api.model
    Wrapper to generate the menus files.
  • generate_model_details(self, model, field_descriptions)
    @api.model
    Wrapper to generate the python file for the model. :param model: ir.model record. :param field_descriptions: list of ir.model.fields records. :return: FileDetails instance.
  • generate_models_details(self)
    @api.model
    Finds the models from the list of fields and generates the __init__ file and each models files (one by class).
  • generate_models_init_details(self, ir_models)
    @api.model
    Wrapper to generate the __init__.py file in models folder.
  • generate_module_init_file_details(self)
    @api.model
    Wrapper to generate the __init__.py file of the module.
  • generate_module_openerp_file_details(self)
    @api.model
    Wrapper to generate the __openerp__.py file of the module.
  • generate_views_details(self)
    @api.model
    Wrapper to generate the views files.
  • get_default_description(self)
    Extract the content of default description
  • is_prefixed(cls, name)
    @classmethod
  • save_icon(self)
    @api.model
    Save the icon of the prototype as a image. The image is used afterwards as the icon of the exported module. :return: FileDetails instance
  • set_field_descriptions(self)
    Mock the list of fields into dictionary. It allows us to add or change attributes of the fields. :return: None
  • setup_env(self, api_version)
    @api.model
    Set the Jinja2 environment. The environment will helps the system to find the templates to render. :param api_version: module_prototyper.api_version, odoo api :return: jinja2.Environment instance.
  • unprefix(cls, name)
    @classmethod

New fields (2)
  • manifest_file_name Char
  • name Char
Public methods (0)

No public methods.

New fields (4)
  • api_version Many2one → module_prototyper.api_version
    comodel_name='module_prototyper.api_version' default=_default_api_version required=True string='API version'
  • data Binary
    readonly=True args: 'File'
  • name Char
    readonly=True args: 'File Name'
  • state Selection
    default='choose' args: [('choose', 'choose'), ('get', 'get')]
Public methods (2)
  • action_export(self, ids)
    @api.model
    Export a zip file containing the module based on the information provided in the prototype, using the templates chosen in the wizard.
  • zip_files(wizard, prototypes)
    @staticmethod
    Takes a set of file and zips them. :param file_details: tuple (filename, file_content) :return: tuple (zip_file, stringIO)
REPOSITORY
REPOSITORYOCA/server-tools
GIT
GIThttps://github.com/OCA/server-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-tools/tree/9.0/module_prototyper
VERSION
VERSION 0.1.0
CATEGORY
CATEGORYOthers
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Savoir-faire Linux, Sudokeys
MAINTAINERS
MAINTAINERSSavoir-faire Linux
COMMITTERS
COMMITTERSPedro M. Baeza, Stéphane Bidoul (ACSONE), OCA Transbot, Nicolas JEUDY, oca-travis, Weblate
WEBSITE
WEBSITEhttp://www.savoirfairelinux.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:15:23
ODOO DEPENDENCIES
ODOO DEPENDENCIES
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
module_prototyper_base_form_view Base form view for module prototypes module_prototyper form New
module_prototyper_base_tree_view Base tree View for module prototypes module_prototyper tree New
view_ir_model_fields_form view_ir_model_fields_form ir.model.fields field Inherits base.view_model_fields_form
view_ir_model_form view_ir_model_form ir.model xpath Inherits base.view_model_form
view_module_export_wizard Export Module module_prototyper.module.export form New
Models touched (3)

New fields (6)
  • client_context Char
    help=_('Context to use on the client side when handling the field (python dictionary)') args: 'Context'
  • column1 Char
    help=_("name of the column referring to 'these' records in the relation table") args: 'Column1'
  • column2 Char
    help=_("name of the column referring to 'those' records in the relation table") args: 'Column2'
  • helper Text
    args: 'Helper'
  • limit Integer
    help=_('Read limit') args: 'Read limit'
  • notes Text
    args: 'Notes to developers.'
Public methods (0)

No public methods.

New fields (25)
  • activity_ids Many2many → workflow.activity
    help='Enter the list of workflow activities that you have created and want to export in this module' args: 'workflow.activity', 'prototype_wf_activity_rel', 'module_prototyper_id', 'activity_id', 'Activities'
  • application Boolean
    default=False help='Check if the module is an Odoo application.' args: 'Application'
  • author Char
    help='Enter your name' required=True args: 'Author'
  • auto_install Boolean
    default=False help='Check if the module should be install by default.' args: 'Auto Install'
  • category_id Many2one → ir.module.category
    args: 'ir.module.category', 'Category'
  • data_ids Many2many → ir.filters
    help='The records matching the filters will be added as data.' args: 'ir.filters', 'prototype_data_rel', 'module_prototyper_id', 'filter_id', 'Data filters'
  • demo_ids Many2many → ir.filters
    help='The records matching the filters will be added as demo data.' args: 'ir.filters', 'prototype_demo_rel', 'module_prototyper_id', 'filter_id', 'Demo filters'
  • dependency_ids Many2many → ir.module.module
    help='Enter the list of required modules that need to be installed for your module to work properly' args: 'ir.module.module', 'module_prototyper_module_rel', 'module_prototyper_id', 'module_id', 'Dependencies'
  • description Text
    default=get_default_description help='Enter the description of your module, what it does, how to install, configure and use it, the roadmap or known issues. The description will be exported in README.rst' required=True args: 'Description'
  • field_ids Many2many → ir.model.fields
    help='Enter the list of fields that you have created or modified and want to export in this module. New models will be exported as long as you choose one of his fields.' args: 'ir.model.fields', 'prototype_fields_rel', 'module_prototyper_id', 'field_id', 'Fields'
  • group_ids Many2many → res.groups
    help='Enter the list of groups that you have created and want to export in this module.' args: 'res.groups', 'prototype_groups_rel', 'module_prototyper_id', 'group_id', 'Groups'
  • human_name Char
    help='The Module Name will be used as the displayed name of the exported module.' required=True args: 'Module Name'
  • icon_image Binary
    help='The icon set up here will be used as the icon for the exported module also' args: 'Icon'
  • license Selection
    default=licenses.AGPL3 string='License' args: [(licenses.GPL3, 'GPL Version 3'), (licenses.GPL3_L, 'GPL-3 or later version'), (licenses.LGPL3, 'LGPL-3'), (licenses.LGPL3_L, 'LGPL-3 or later version'), (licenses.AGPL3, 'Affero GPL-3'), (licenses.OSI, 'Other OSI Approved Licence'), ('Other proprietary', 'Other Proprietary')]
  • maintainer Char
    help='Enter the name of the person or organization who will maintain this module' args: 'Maintainer'
  • menu_ids Many2many → ir.ui.menu
    help='Enter the list of menu items that you have created and want to export in this module. Related windows actions will be exported as well.' args: 'ir.ui.menu', 'prototype_menu_rel', 'module_prototyper_id', 'menu_id', 'Menu Items'
  • name Char
    help='The technical name will be used to define the name of the exported module, the name of the model.' required=True args: 'Technical Name'
  • report_ids Many2many → ir.actions.report.xml
    help='Enter the list of reports that you have created and want to export in this module.' args: 'ir.actions.report.xml', 'prototype_report_rel', 'module_prototyper_id', 'report_id', 'Reports'
  • right_ids Many2many → ir.model.access
    help='Enter the list of access rights that you have created and want to export in this module.' args: 'ir.model.access', 'prototype_rights_rel', 'module_prototyper_id', 'right_id', 'Access Rights'
  • rule_ids Many2many → ir.rule
    help='Enter the list of record rules that you have created and want to export in this module.' args: 'ir.rule', 'prototype_rule_rel', 'module_prototyper_id', 'rule_id', 'Record Rules'
  • summary Char
    help='Enter a summary of your module' required=True args: 'Summary'
  • transition_ids Many2many → workflow.transition
    help='Enter the list of workflow transitions that you have created and want to export in this module' args: 'workflow.transition', 'prototype_wf_transition_rel', 'module_prototyper_id', 'transition_id', 'Transitions'
  • version Char
    default='8.0.1.0.0' help='Enter the version of your module with 5 digits' size=9 args: 'Version'
  • view_ids Many2many → ir.ui.view
    help='Enter the list of views that you have created and want to export in this module.' args: 'ir.ui.view', 'prototype_view_rel', 'module_prototyper_id', 'view_id', 'Views'
  • website Char
    help='Enter the URL of your website' args: 'Website'
Public methods (19)
  • fixup_arch(cls, archstr)
    @classmethod
  • fixup_domain(cls, domain)
    @classmethod
    Fix a domain according to unprefixing of fields
  • friendly_name(cls, name)
    @classmethod
  • generate_data_files(self)
    @api.model
    Generate data and demo files
  • generate_file_details(self, filename, template, **kwargs)
    @api.model
    generate file details from jinja2 template. :param filename: name of the file the content is related to :param template: path to the file to render the content :param kwargs: arguments of the template :return: File_details instance
  • generate_files(self)
    @api.model
    Generates the files from the details of the prototype. :return: tuple
  • generate_menus_details(self)
    @api.model
    Wrapper to generate the menus files.
  • generate_model_details(self, model, field_descriptions)
    @api.model
    Wrapper to generate the python file for the model. :param model: ir.model record. :param field_descriptions: list of ir.model.fields records. :return: FileDetails instance.
  • generate_models_details(self)
    @api.model
    Finds the models from the list of fields and generates the __init__ file and each models files (one by class).
  • generate_models_init_details(self, ir_models)
    @api.model
    Wrapper to generate the __init__.py file in models folder.
  • generate_module_init_file_details(self)
    @api.model
    Wrapper to generate the __init__.py file of the module.
  • generate_module_openerp_file_details(self)
    @api.model
    Wrapper to generate the __openerp__.py file of the module.
  • generate_views_details(self)
    @api.model
    Wrapper to generate the views files.
  • get_default_description(self)
    Extract the content of default description
  • is_prefixed(cls, name)
    @classmethod
  • save_icon(self)
    @api.model
    Save the icon of the prototype as a image. The image is used afterwards as the icon of the exported module. :return: FileDetails instance
  • set_field_descriptions(self)
    Mock the list of fields into dictionary. It allows us to add or change attributes of the fields. :return: None
  • set_jinja_env(self, api_version)
    @api.model
    Set the Jinja2 environment. The environment will helps the system to find the templates to render. :param api_version: string, odoo api :return: jinja2.Environment instance.
  • unprefix(cls, name)
    @classmethod

New fields (4)
  • api_version Selection
    default='8.0' required=True args: [('8.0', '8.0')], 'API version'
  • data Binary
    readonly=True args: 'File'
  • name Char
    readonly=True args: 'File Name'
  • state Selection
    default='choose' args: [('choose', 'choose'), ('get', 'get')]
Public methods (2)
  • action_export(self, ids)
    @api.model
    Export a zip file containing the module based on the information provided in the prototype, using the templates chosen in the wizard.
  • zip_files(wizard, prototypes)
    @staticmethod
    Takes a set of file and zips them. :param file_details: tuple (filename, file_content) :return: tuple (zip_file, stringIO)
REPOSITORY
REPOSITORYOCA/server-tools
GIT
GIThttps://github.com/OCA/server-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-tools/tree/8.0/module_prototyper
VERSION
VERSION 0.3.0
CATEGORY
CATEGORYOthers
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Savoir-faire Linux
MAINTAINERS
MAINTAINERSSavoir-faire Linux
COMMITTERS
COMMITTERSMaxime Chambreuil, Stéphane Bidoul (ACSONE), OCA Transbot, oca-travis, Weblate, Peter Alabaster
WEBSITE
WEBSITEhttp://www.savoirfairelinux.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:11:25
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/server-tools:
    - admin_technical_features
odoo/odoo:
    - base_import
    - web
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
module_prototyper_base_form_view Base form view for module prototypes module_prototyper form New
module_prototyper_base_tree_view Base tree View for module prototypes module_prototyper tree New
view_ir_model_fields_form view_ir_model_fields_form ir.model.fields field Inherits base.view_model_fields_form
view_ir_model_form view_ir_model_form ir.model xpath Inherits base.view_model_form
view_module_export_wizard Export Module module_prototyper.module.export form New
Models touched (3)

New fields (6)
  • client_context Char
    help=_('Context to use on the client side when handling the field (python dictionary)') args: 'Context'
  • column1 Char
    help=_("name of the column referring to 'these' records in the relation table") args: 'Column1'
  • column2 Char
    help=_("name of the column referring to 'those' records in the relation table") args: 'Column2'
  • helper Text
    args: 'Helper'
  • limit Integer
    help=_('Read limit') args: 'Read limit'
  • notes Text
    args: 'Notes to developers.'
Public methods (0)

No public methods.

New fields (25)
  • activity_ids Many2many → workflow.activity
    help='Enter the list of workflow activities that you have created and want to export in this module' args: 'workflow.activity', 'prototype_wf_activity_rel', 'module_prototyper_id', 'activity_id', 'Activities'
  • application Boolean
    default=False help='Check if the module is an Odoo application.' args: 'Application'
  • author Char
    help='Enter your name' required=True args: 'Author'
  • auto_install Boolean
    default=False help='Check if the module should be install by default.' args: 'Auto Install'
  • category_id Many2one → ir.module.category
    args: 'ir.module.category', 'Category'
  • data_ids Many2many → ir.filters
    help='The records matching the filters will be added as data.' args: 'ir.filters', 'prototype_data_rel', 'module_prototyper_id', 'filter_id', 'Data filters'
  • demo_ids Many2many → ir.filters
    help='The records matching the filters will be added as demo data.' args: 'ir.filters', 'prototype_demo_rel', 'module_prototyper_id', 'filter_id', 'Demo filters'
  • dependency_ids Many2many → ir.module.module
    help='Enter the list of required modules that need to be installed for your module to work properly' args: 'ir.module.module', 'module_prototyper_module_rel', 'module_prototyper_id', 'module_id', 'Dependencies'
  • description Text
    default=get_default_description help='Enter the description of your module, what it does, how to install, configure and use it, the roadmap or known issues. The description will be exported in README.rst' required=True args: 'Description'
  • field_ids Many2many → ir.model.fields
    help='Enter the list of fields that you have created or modified and want to export in this module. New models will be exported as long as you choose one of his fields.' args: 'ir.model.fields', 'prototype_fields_rel', 'module_prototyper_id', 'field_id', 'Fields'
  • group_ids Many2many → res.groups
    help='Enter the list of groups that you have created and want to export in this module.' args: 'res.groups', 'prototype_groups_rel', 'module_prototyper_id', 'group_id', 'Groups'
  • human_name Char
    help='The Module Name will be used as the displayed name of the exported module.' required=True args: 'Module Name'
  • icon_image Binary
    help='The icon set up here will be used as the icon for the exported module also' args: 'Icon'
  • license Selection
    default=licenses.AGPL3 string='License' args: [(licenses.GPL3, 'GPL Version 3'), (licenses.GPL3_L, 'GPL-3 or later version'), (licenses.LGPL3, 'LGPL-3'), (licenses.LGPL3_L, 'LGPL-3 or later version'), (licenses.AGPL3, 'Affero GPL-3'), (licenses.OSI, 'Other OSI Approved Licence'), ('Other proprietary', 'Other Proprietary')]
  • maintainer Char
    help='Enter the name of the person or organization who will maintain this module' args: 'Maintainer'
  • menu_ids Many2many → ir.ui.menu
    help='Enter the list of menu items that you have created and want to export in this module. Related windows actions will be exported as well.' args: 'ir.ui.menu', 'prototype_menu_rel', 'module_prototyper_id', 'menu_id', 'Menu Items'
  • name Char
    help='The technical name will be used to define the name of the exported module, the name of the model.' required=True args: 'Technical Name'
  • report_ids Many2many → ir.actions.report.xml
    help='Enter the list of reports that you have created and want to export in this module.' args: 'ir.actions.report.xml', 'prototype_report_rel', 'module_prototyper_id', 'report_id', 'Reports'
  • right_ids Many2many → ir.model.access
    help='Enter the list of access rights that you have created and want to export in this module.' args: 'ir.model.access', 'prototype_rights_rel', 'module_prototyper_id', 'right_id', 'Access Rights'
  • rule_ids Many2many → ir.rule
    help='Enter the list of record rules that you have created and want to export in this module.' args: 'ir.rule', 'prototype_rule_rel', 'module_prototyper_id', 'rule_id', 'Record Rules'
  • summary Char
    help='Enter a summary of your module' required=True args: 'Summary'
  • transition_ids Many2many → workflow.transition
    help='Enter the list of workflow transitions that you have created and want to export in this module' args: 'workflow.transition', 'prototype_wf_transition_rel', 'module_prototyper_id', 'transition_id', 'Transitions'
  • version Char
    default='8.0.1.0.0' help='Enter the version of your module with 5 digits' size=9 args: 'Version'
  • view_ids Many2many → ir.ui.view
    help='Enter the list of views that you have created and want to export in this module.' args: 'ir.ui.view', 'prototype_view_rel', 'module_prototyper_id', 'view_id', 'Views'
  • website Char
    help='Enter the URL of your website' args: 'Website'
Public methods (19)
  • fixup_arch(cls, archstr)
    @classmethod
  • fixup_domain(cls, domain)
    @classmethod
    Fix a domain according to unprefixing of fields
  • friendly_name(cls, name)
    @classmethod
  • generate_data_files(self)
    @api.model
    Generate data and demo files
  • generate_file_details(self, filename, template, **kwargs)
    @api.model
    generate file details from jinja2 template. :param filename: name of the file the content is related to :param template: path to the file to render the content :param kwargs: arguments of the template :return: File_details instance
  • generate_files(self)
    @api.model
    Generates the files from the details of the prototype. :return: tuple
  • generate_menus_details(self)
    @api.model
    Wrapper to generate the menus files.
  • generate_model_details(self, model, field_descriptions)
    @api.model
    Wrapper to generate the python file for the model. :param model: ir.model record. :param field_descriptions: list of ir.model.fields records. :return: FileDetails instance.
  • generate_models_details(self)
    @api.model
    Finds the models from the list of fields and generates the __init__ file and each models files (one by class).
  • generate_models_init_details(self, ir_models)
    @api.model
    Wrapper to generate the __init__.py file in models folder.
  • generate_module_init_file_details(self)
    @api.model
    Wrapper to generate the __init__.py file of the module.
  • generate_module_openerp_file_details(self)
    @api.model
    Wrapper to generate the __openerp__.py file of the module.
  • generate_views_details(self)
    @api.model
    Wrapper to generate the views files.
  • get_default_description(self)
    Extract the content of default description
  • is_prefixed(cls, name)
    @classmethod
  • save_icon(self)
    @api.model
    Save the icon of the prototype as a image. The image is used afterwards as the icon of the exported module. :return: FileDetails instance
  • set_field_descriptions(self)
    Mock the list of fields into dictionary. It allows us to add or change attributes of the fields. :return: None
  • set_jinja_env(self, api_version)
    @api.model
    Set the Jinja2 environment. The environment will helps the system to find the templates to render. :param api_version: string, odoo api :return: jinja2.Environment instance.
  • unprefix(cls, name)
    @classmethod

New fields (4)
  • api_version Selection
    default='8.0' required=True args: [('8.0', '8.0')], 'API version'
  • data Binary
    readonly=True args: 'File'
  • name Char
    readonly=True args: 'File Name'
  • state Selection
    default='choose' args: [('choose', 'choose'), ('get', 'get')]
Public methods (2)
  • action_export(self, ids)
    @api.model
    Export a zip file containing the module based on the information provided in the prototype, using the templates chosen in the wizard.
  • zip_files(wizard, prototypes)
    @staticmethod
    Takes a set of file and zips them. :param file_details: tuple (filename, file_content) :return: tuple (zip_file, stringIO)