--- /dev/null
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_ir_attachment_group_system","ir_attachment group_system","model_ir_attachment",,1,1,1,1
+"access_ir_cron_group_cron","ir_cron group_cron","model_ir_cron","group_system",1,1,1,1
+"access_ir_cron_user","ir_cron user","model_ir_cron","group_user",1,0,0,0
+"access_ir_default_group_system","ir_default group_system","model_ir_default",,1,1,1,1
+"access_ir_exports_group_system","ir_exports group_system","model_ir_exports",,1,1,1,1
+"access_ir_exports_line_group_system","ir_exports_line group_system","model_ir_exports_line",,1,1,1,1
+"access_ir_model_group_erp_manager","ir_model group_erp_manager","model_ir_model","group_erp_manager",1,1,1,1
+"access_ir_model_access_group_erp_manager","ir_model_access_group_erp_manager","model_ir_model_access","group_erp_manager",1,1,1,1
+"access_ir_model_grid_group_erp_manager","ir_model_access_grid_group_erp_manager","model_ir_model_grid","group_erp_manager",1,1,1,1
+"access_ir_model_config_group_erp_manager","ir_model_config group_erp_manager","model_ir_model_config","group_erp_manager",1,1,1,1
+"access_ir_model_data_group_erp_manager","ir_model_data group_erp_manager","model_ir_model_data","group_erp_manager",1,1,1,1
+"access_ir_model_fields_group_erp_manager","ir_model_fields group_erp_manager","model_ir_model_fields","group_erp_manager",1,1,1,1
+"access_ir_model_all","ir_model_all","model_ir_model",,1,0,0,0
+"access_ir_model_access_all","ir_model_access_all","model_ir_model_access",,1,0,0,0
+"access_ir_model_grid_all","ir_model_access_grid_all","model_ir_model_grid",,0,0,0,0
+"access_ir_model_config_all","ir_model_config_all","model_ir_model_config",,1,0,0,0
+"access_ir_model_data_all","ir_model_data all","model_ir_model_data",,1,0,0,0
+"access_ir_model_fields_all","ir_model_fields all","model_ir_model_fields",,1,0,0,0
+"access_ir_module_category_group_user","ir_module_category group_user","model_ir_module_category","group_system",1,0,0,0
+"access_ir_module_module_group_user","ir_module_module group_user","model_ir_module_module","group_system",1,1,1,1
+"access_ir_module_module_dependency_group_system","ir_module_module_dependency group_system","model_ir_module_module_dependency","group_system",1,1,1,1
+"access_ir_module_repository_group_system","ir_module_repository group_system","model_ir_module_repository","group_system",1,1,1,1
+"access_ir_property_group_user","ir_property group_user","model_ir_property",,1,0,0,0
+"access_ir_property_group_user_manager","ir_property group_manager","model_ir_property",base.group_partner_manager,1,1,1,1
+"access_ir_report_custom_group_system","ir_report_custom group_system","model_ir_report_custom",,1,0,0,0
+"access_ir_report_custom_fields_group_system","ir_report_custom_fields group_system","model_ir_report_custom_fields",,1,0,0,0
+"access_ir_rule_group_user","ir_rule group_user","model_ir_rule",,1,0,0,0
+"access_ir_rule_group_group_user","ir_rule_group group_user","model_ir_rule_group",,1,0,0,0
+"access_ir_rule_group_erp_manager","ir_rule group_erp_manager","model_ir_rule","group_erp_manager",1,1,1,1
+"access_ir_rule_group_group_erp_manager","ir_rule_group group_erp_manager","model_ir_rule_group","group_erp_manager",1,1,1,1
+"access_ir_sequence_group_user","ir_sequence group_user","model_ir_sequence",,1,1,1,1
+"access_ir_sequence_type_group_user","ir_sequence_type group_user","model_ir_sequence_type",,1,0,0,0
+"access_ir_translation_group_system","ir_translation group_system","model_ir_translation",,1,1,1,1
+"access_ir_ui_menu_group_user","ir_ui_menu group_user","model_ir_ui_menu",,1,0,0,0
+"access_ir_ui_menu_group_system","ir_ui_menu group_system","model_ir_ui_menu","group_system",1,1,1,1
+"access_ir_ui_view_group_user","ir_ui_view group_user","model_ir_ui_view",,1,0,0,0
+"access_ir_ui_view_group_system","ir_ui_view group_system","model_ir_ui_view","group_system",1,1,1,1
+"access_ir_ui_view_custom_group_user","ir_ui_view_custom_group_user","model_ir_ui_view_custom",,1,0,0,0
+"access_ir_ui_view_custom_group_system","ir_ui_view_custom_group_system","model_ir_ui_view_custom","group_system",1,1,1,1
+"access_ir_ui_view_sc_group_user","ir_ui_view_sc group_user","model_ir_ui_view_sc",,1,1,1,1
+"access_ir_values_group_erp_manager","ir_values group_erp_manager","model_ir_values",group_erp_manager,1,1,1,1
+"access_ir_values_group_all","ir_values group_all","model_ir_values",,1,0,0,0
+"access_wizard_ir_model_menu_create_group_system","wizard_ir_model_menu_create group_system","model_wizard_ir_model_menu_create","group_system",1,1,1,1
+"access_wizard_ir_model_menu_create_line_group_system","wizard_ir_model_menu_create_line group_system","model_wizard_ir_model_menu_create_line","group_system",1,1,1,1
+"access_wizard_module_lang_export_group_system","wizard_module_lang_export group_system","model_wizard_module_lang_export","group_system",1,1,1,1
+"access_res_company_group_erp_manager","res_company group_erp_manager","model_res_company","group_erp_manager",1,1,1,1
+"access_res_company_group_user","res_company group_user","model_res_company",,1,0,0,0
+"access_res_country_group_all","res_country group_user_all","model_res_country",,1,0,0,0
+"access_res_country_state_group_all","res_country_state group_user_all","model_res_country_state",,1,0,0,0
+"access_res_country_group_user","res_country group_user","model_res_country","group_partner_manager",1,1,1,1
+"access_res_country_state_group_user","res_country_state group_user","model_res_country_state","group_partner_manager",1,1,1,1
+"access_res_currency_group_all","res_currency group_all","model_res_currency",,1,0,0,0
+"access_res_currency_rate_group_all","res_currency_rate group_all","model_res_currency_rate",,1,0,0,0
+"access_res_currency_group_system","res_currency group_system","model_res_currency","group_system",1,1,1,1
+"access_res_currency_rate_group_system","res_currency_rate group_system","model_res_currency_rate","group_system",1,1,1,1
+"access_res_groups_group_erp_manager","res_groups group_erp_manager","model_res_groups","group_erp_manager",1,1,1,1
+"access_res_groups_group_user","res_groups group_user","model_res_groups",,1,0,0,0
+"access_res_lang_group_all","res_lang group_all","model_res_lang",,1,0,0,0
+"access_res_lang_group_user","res_lang group_user","model_res_lang","group_system",1,1,1,1
+"access_res_partner_group_partner_manager","res_partner group_partner_manager","model_res_partner","group_partner_manager",1,1,1,1
+"access_res_partner_group_user","res_partner group_user","model_res_partner",group_user,1,0,0,0
+"access_res_partner_address_group_partner_manager","res_partner_address group_partner_manager","model_res_partner_address","group_partner_manager",1,1,1,1
+"access_res_partner_address_group_user","res_partner_address group_user","model_res_partner_address",group_user,1,0,0,0
+"access_res_partner_bank_group_user","res_partner_bank group_user","model_res_partner_bank",group_user,1,0,0,0
+"access_res_partner_bank_group_partner_manager","res_partner_bank group_partner_manager","model_res_partner_bank","group_partner_manager",1,1,1,1
+"access_res_partner_bank_type_group_partner_manager","res_partner_bank_type group_partner_manager","model_res_partner_bank_type","group_partner_manager",1,1,1,1
+"access_res_partner_bank_type_group_user","res_partner_bank_type group_user","model_res_partner_bank_type",group_user,1,0,0,0
+"access_res_partner_bank_type_field_group_partner_manager","res_partner_bank_type_field group_partner_manager","model_res_partner_bank_type_field","group_partner_manager",1,1,1,1
+"access_res_partner_bank_type_field_group_user","res_partner_bank_type_field group_user","model_res_partner_bank_type_field",group_user,1,0,0,0
+"access_res_partner_canal_group_user","res_partner_canal group_user","model_res_partner_canal",group_user,1,0,0,0
+"access_res_partner_canal_group_partner_manager","res_partner_canal group_partner_manager","model_res_partner_canal","group_partner_manager",1,1,1,1
+"access_res_partner_category_group_user","res_partner_category group_user","model_res_partner_category",group_user,1,0,0,0
+"access_res_partner_category_group_partner_manager","res_partner_category group_partner_manager","model_res_partner_category","group_partner_manager",1,1,1,1
+"access_res_partner_event_group_user","res_partner_event group_user","model_res_partner_event",group_user,1,1,1,1
+"access_res_partner_event_group_partner_manager","res_partner_event group_partner_manager","model_res_partner_event","group_partner_manager",1,1,1,1
+"access_res_partner_event_type_group_partner_manager","res_partner_event_type group_partner_manager","model_res_partner_event_type","group_partner_manager",1,1,1,1
+"access_res_partner_event_type_group_user","res_partner_event_type group_user","model_res_partner_event_type",group_user,1,0,0,0
+"access_res_partner_function_group_user","res_partner_function group_user","model_res_partner_function","group_partner_manager",1,1,1,1
+"access_res_partner_function_group_partner_manager","res_partner_function group_partner_manager","model_res_partner_function",group_user,1,0,0,0
+"access_res_partner_som_group_user","res_partner_som group_user","model_res_partner_som","group_partner_manager",1,1,1,1
+"access_res_partner_som_group_partner_manager","res_partner_som group_partner_manager","model_res_partner_som",group_user,1,0,0,0
+"access_res_partner_title_group_user","res_partner_title group_user","model_res_partner_title","group_partner_manager",1,1,1,1
+"access_res_partner_title_group_partner_manager","res_partner_title group_partner_manager","model_res_partner_title",group_user,1,0,0,0
+"access_res_request_group_user","res_request group_user","model_res_request",,1,1,1,1
+"access_res_request_history_group_user","res_request_history group_user","model_res_request_history",,1,1,1,1
+"access_res_request_link_group_system","res_request_link group_system","model_res_request_link","group_system",1,1,1,1
+"access_res_request_link_group_user","res_request_link group_user","model_res_request_link",,1,0,0,0
+"access_res_users_all","res_users all","model_res_users",,1,0,0,0
+"access_res_users_group_erp_manager","res_users group_erp_manager","model_res_users","group_erp_manager",1,1,1,1
+"access_ir_actions_all","ir_actions_all","model_ir_actions_actions",,1,0,0,0
+"access_ir_actions_group_system","ir_actions_group_system","model_ir_actions_actions","group_system",1,1,1,1
+"access_ir_actions_act_window_all","ir_actions_act_window_all","model_ir_actions_act_window",,1,0,0,0
+"access_ir_actions_act_window_system","ir_actions_act_window_system","model_ir_actions_act_window","group_system",1,1,1,1
+"access_ir_actions_act_window_close_all","ir_actions_act_window_close_all","model_ir_actions_act_window_close",,1,0,0,0
+"access_ir_actions_act_window_close_group_system","ir_actions_act_window_close_group_system","model_ir_actions_act_window_close","group_system",1,1,1,1
+"access_ir_actions_report_xml_all","ir_actions_report_xml","model_ir_actions_report_xml",,1,0,0,0
+"access_ir_actions_report_xml_group_system","ir_actions_report_xml_group_system","model_ir_actions_report_xml","group_system",1,1,1,1
+"access_ir_actions_wizard_all","ir_actions_wizard","model_ir_actions_wizard",,1,0,0,0
+"access_ir_actions_wizard_group_system","ir_actions_wizard_group_system","model_ir_actions_wizard","group_system",1,1,1,1
+"access_ir_actions_todo_group_system","ir_actions_todo group system","model_ir_actions_todo","group_system",1,1,1,1
+"access_ir_actions_config_wiz_group_system","ir_actions_configuration_wizard group system","model_ir_actions_configuration_wizard","group_system",1,1,1,1
+"access_workflow_all","workflow_all","model_workflow",,1,0,0,0
+"access_workflow_group_system","workflow_group_system","model_workflow","group_system",1,1,1,1
+"access_workflow_activity_all","workflow_activity_all","model_workflow_activity",,1,0,0,0
+"access_workflow_activity_group_system","workflow_activity_group_system","model_workflow_activity","group_system",1,1,1,1
+"access_workflow_instance_all","workflow_instance_all","model_workflow_instance",,1,1,1,1
+"access_workflow_transition_all","workflow_transition_all","model_workflow_transition",,1,0,0,0
+"access_workflow_transition_group_system","workflow_transition_group_system","model_workflow_transition","group_system",1,1,1,1
+"access_workflow_triggers_all","workflow_triggers_all","model_workflow_triggers",,1,0,0,0
+"access_workflow_triggers_group_system","workflow_triggers_group_system","model_workflow_triggers","group_system",1,1,1,1
+"access_workflow_workitem_all","workflow_workitem_all","model_workflow_workitem",,1,1,1,1
+"access_actions_report_custom_all","ir_actions_report_custom_all","model_ir_actions_report_custom",,1,0,0,0
+"access_actions_report_custom_group_system","ir_actions_report_custom_group_system","model_ir_actions_report_custom","group_system",1,1,1,1
+"access_ir_actions_act_window_view_all","ir_actions_act_window_view_all","model_ir_actions_act_window_view",,1,0,0,0
+"access_ir_actions_act_window_view_group_system","ir_actions_act_window_view_group_system","model_ir_actions_act_window_view","group_system",1,1,1,1
+"access_ir_actions_url_all","ir_actions_url_all","model_ir_actions_url",,1,0,0,0
+"access_ir_actions_url_group_system","ir_actions_url_group_system","model_ir_actions_url","group_system",1,1,1,1
+"access_ir_server_object_lines_all","ir_server_object_lines_all","model_ir_server_object_lines",,1,0,0,0
+"access_ir_server_object_lines_group_system","ir_server_object_lines_group_system","model_ir_server_object_lines","group_system",1,1,1,1
+"access_ir_actions_server_all","ir_actions_server_all","model_ir_actions_server",,1,0,0,0
+"access_ir_actions_server_group_system","ir_actions_server_group_system","model_ir_actions_server","group_system",1,1,1,1
+"access_module_update_translations_group_user","wizard_update_translations_group_user","model_wizard_module_update_translations","group_system",1,1,1,1
+"access_res_bank_group_system","res_bank_group_system","model_res_bank","group_system",1,1,1,1
+"access_res_payterm_group_system","res_payterm_group_system","model_res_payterm","group_system",1,1,1,1
+"access_res_roles_group_erpmanager","res_roles_group_erp_manager","model_res_roles","group_erp_manager",1,1,1,1
+"access_res_config_view_group_erpmanager","res_config_view_erp_manager","model_res_config_view","group_erp_manager",1,1,1,1
+"access_res_roles_all","res_roles_all","model_res_roles",,1,0,0,0
+"access_res_config_view_all","res_config_view_all","model_res_config_view",,1,0,0,0
+"access_res_bank_group_partner_manager","res_bank_group_partner_manager","model_res_bank","group_partner_manager",1,1,1,1
+"access_res_bank_user","res_bank user","model_res_bank","group_user",1,0,0,0
+"access_maintenance_group_user","maintenance_contract group_user","model_maintenance_contract","group_maintenance_manager",1,1,1,1
+"access_maintenance_contract_module","maintenance.contract.module","model_maintenance_contract_module","group_maintenance_manager",1,1,1,1
+"access_maintenance_contract_wizard","maintenance.contract.wizard","model_maintenance_contract_wizard","group_maintenance_manager",1,1,1,1
--- /dev/null
+# -*- encoding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
+# $Id$
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+import netsvc
+import wizard
+import pooler
+import os
+
+import base64
+import tempfile
+import tarfile
+
+
+
+choose_file_form = '''<?xml version="1.0"?>
+<form string="Create Technical Guide in rst format">
+ <separator string="Technical Guide in rst format" colspan="4"/>
+ <label string="Please choose a file where the Technical Guide will be written." colspan="4"/>
+ <field name="rst_file" />
+ <field name="name" invisible="1"/>
+</form>
+'''
+
+choose_file_fields = {
+ 'rst_file': {'string': 'file', 'type': 'binary', 'required': True, 'readonly': True},
+ 'name': {'string': 'filename', 'type': 'char', 'required': True, 'readonly': True},
+}
+
+
+class RstDoc(object):
+ def __init__(self, module, objects):
+ self.dico = {
+ 'name': module.name,
+ 'shortdesc': module.shortdesc,
+ 'latest_version': module.latest_version,
+ 'website': module.website,
+ 'description': self._handle_text(module.description or 'None'),
+ 'report_list': self._handle_list_items(module.reports_by_module),
+ 'menu_list': self._handle_list_items(module.menus_by_module),
+ 'view_list': self._handle_list_items(module.views_by_module),
+ 'depends': module.dependencies_id,
+ }
+ self.objects = objects
+
+ def _handle_list_items(self, list_item_as_string):
+ return [item.replace('*', '\*') for item in list_item_as_string.split('\n')]
+
+ def _handle_text(self, txt):
+ lst = [' %s' % line for line in txt.split('\n')]
+ return '\n'.join(lst)
+
+ def _write_header(self):
+ dico = self.dico
+ title = "Module %s (*%s*)" % (dico['shortdesc'], dico['name'])
+ title_underline = "=" * len(title)
+ dico['title'] = title
+ dico['title_underline'] = title_underline
+ sl = [
+ "",
+ "%(title)s",
+ "%(title_underline)s",
+ ":Module: %(name)s",
+ ":Name: %(shortdesc)s",
+ ":Version: %(latest_version)s",
+ ":Directory: %(name)s",
+ ":Web: %(website)s",
+ "",
+ "Description",
+ "-----------",
+ "",
+ "::",
+ " ",
+ " %(description)s",
+ ""]
+ return '\n'.join(sl) % (dico)
+
+ def _write_reports(self):
+ sl = ["",
+ "Reports",
+ "-------"]
+ for report in self.dico['report_list']:
+ if report:
+ sl.append("")
+ sl.append(" * %s" % report)
+ sl.append("")
+ return '\n'.join(sl)
+
+ def _write_menus(self):
+ sl = ["",
+ "Menus",
+ "-------"]
+ for menu in self.dico['menu_list']:
+ if menu:
+ sl.append("")
+ sl.append(" * %s" % menu)
+
+ sl.append("")
+ return '\n'.join(sl)
+
+ def _write_views(self):
+ sl = ["",
+ "Views",
+ "-----"]
+ for view in self.dico['view_list']:
+ if view:
+ sl.append("")
+ sl.append(" * %s" % view)
+ sl.append("")
+ return '\n'.join(sl)
+
+ def _write_depends(self):
+ sl = ["",
+ "Dependencies",
+ "------------"]
+ for dependency in self.dico['depends']:
+ sl.append("")
+ sl.append(" * %s - %s" % (dependency.name, dependency.state))
+ return '\n'.join(sl)
+
+ def _write_objects(self):
+ def write_field(field_def):
+ field_name = field_def[0]
+ field_dict = field_def[1]
+ field_required = field_dict.get('required', '') and ', required'
+ field_readonly = field_dict.get('readonly', '') and ', readonly'
+
+ field_help_s = field_dict.get('help', '').strip()
+ if field_help_s:
+ field_help_s = "*%s*" % (field_help_s)
+ field_help = '\n'.join([' %s' % line.strip() for line in field_help_s.split('\n')])
+ else:
+ field_help = ''
+
+ s = ""
+ s += ":%s: " % (field_name)
+ s += field_dict.get('string', 'Unknown')
+ s += ", " + field_dict['type']
+ s += field_required
+ s += field_readonly
+ s += "\n\n%s" % (field_help)
+ return s
+
+ sl = ["",
+ "",
+ "Objects",
+ "-------"]
+ for obj in self.objects:
+ title = obj['object'].name
+ sl.append("")
+ sl.append(title)
+ sl.append('#' * len(title))
+ sl.append("")
+
+ for field in obj['fields']:
+ sl.append("")
+ sl.append(write_field(field))
+ sl.append("")
+
+ return '\n'.join(sl)
+
+ def write(self):
+ s = ''
+ s += self._write_header()
+ s += self._write_reports()
+ s += self._write_menus()
+ s += self._write_views()
+ s += self._write_depends()
+ s += self._write_objects()
+
+ return s
+
+
+class wizard_tech_guide_rst(wizard.interface):
+
+ def _generate(self, cr, uid, data, context):
+ pool = pooler.get_pool(cr.dbname)
+ module_model = pool.get('ir.module.module')
+ module_ids = data['ids']
+
+ module_index = []
+
+ # create a temporary gzipped tarfile:
+ tgz_tmp_filename = tempfile.mktemp('_rst_module_doc.tgz')
+ try:
+ tarf = tarfile.open(tgz_tmp_filename, 'w:gz')
+
+ modules = module_model.browse(cr, uid, module_ids)
+ for module in modules:
+ index_dict = {
+ 'name': module.name,
+ 'shortdesc': module.shortdesc,
+ }
+ module_index.append(index_dict )
+
+ objects = self._get_objects(cr, uid, module)
+ rstdoc = RstDoc(module, objects)
+ out = rstdoc.write()
+
+ try:
+ tmp_file = tempfile.NamedTemporaryFile()
+ tmp_file.write(out.encode('utf8'))
+ tmp_file.file.flush() # write content to file
+ tarf.add(tmp_file.name, arcname=module.name + '.rst')
+ finally:
+ tmp_file.close()
+
+ # write index file:
+ tmp_file = tempfile.NamedTemporaryFile()
+ out = self._create_index(module_index)
+ tmp_file.write(out.encode('utf8'))
+ tmp_file.file.flush()
+ tarf.add(tmp_file.name, arcname='index.rst')
+
+ finally:
+ tarf.close()
+
+ try:
+ os.unlink(tmp_file)
+ except Exception, e:
+ logger = netsvc.Logger()
+ logger.notifyChannel("warning", netsvc.LOG_WARNING,
+ "Temporary file %s could not be deleted. (%s)" % (tmp_file.name, e))
+
+ f = open(tgz_tmp_filename, 'rb')
+ out = f.read()
+ f.close()
+
+ return {
+ 'rst_file': base64.encodestring(out),
+ 'name': 'modules_technical_guide_rst.tgz'
+ }
+
+ def _create_index(self, module_index):
+ sl = ["",
+ ".. _module-technical-guide-link:",
+ "",
+ "Module Technical Guide: Introspection report on objects",
+ "=======================================================",
+ "",
+ ".. toctree::",
+ " :maxdepth: 1",
+ "",
+ ]
+ for mod in module_index:
+ sl.append(" %s" % mod['name'])
+ sl.append("")
+ return '\n'.join(sl)
+
+ def _get_objects(self, cr, uid, module):
+ res = []
+ objects = self._object_find(cr, uid, module)
+ for obj in objects:
+ dico = {
+ 'object': obj,
+ 'fields': self._fields_find(cr, uid, obj.model)
+ }
+ res.append(dico)
+ return res
+
+ def _object_find(self, cr, uid, module):
+ pool = pooler.get_pool(cr.dbname)
+ ids2 = pool.get('ir.model.data').search(cr, uid, [('module', '=', module.name), ('model', '=', 'ir.model')])
+ ids = []
+ for mod in pool.get('ir.model.data').browse(cr, uid, ids2):
+ ids.append(mod.res_id)
+ modobj = pool.get('ir.model')
+ return modobj.browse(cr, uid, ids)
+
+ def _fields_find(self, cr, uid, obj):
+ pool = pooler.get_pool(cr.dbname)
+ modobj = pool.get(obj)
+ res = modobj.fields_get(cr, uid).items()
+ return res
+
+## def _object_doc(self, cr, uid, obj):
+## pool = pooler.get_pool(cr.dbname)
+## modobj = pool.get(obj)
+## return modobj.__doc__
+
+ states = {
+ 'init': {
+ 'actions': [_generate],
+ 'result': {
+ 'type': 'form',
+ 'arch': choose_file_form,
+ 'fields': choose_file_fields,
+ 'state': [
+ ('end', 'Close', 'gtk-close'),
+ ]
+ }
+ },
+ }
+
+wizard_tech_guide_rst('tech.guide.rst')
+