[MERGE] Sync with trunk

bzr revid: tde@openerp.com-20130604134405-byfc98qwgyeoufrl
This commit is contained in:
Thibault Delavallée 2013-06-04 15:44:05 +02:00
commit b545e866b1
19 changed files with 126 additions and 64 deletions

View File

@ -657,7 +657,7 @@ class actions_server(osv.osv):
if action.state=='client_action': if action.state=='client_action':
if not action.action_id: if not action.action_id:
raise osv.except_osv(_('Error'), _("Please specify an action to launch !")) raise osv.except_osv(_('Error'), _("Please specify an action to launch!"))
return self.pool[action.action_id.type].read(cr, uid, action.action_id.id, context=context) return self.pool[action.action_id.type].read(cr, uid, action.action_id.id, context=context)
if action.state=='code': if action.state=='code':

View File

@ -297,7 +297,7 @@
<record id="property_rule" model="ir.rule"> <record id="property_rule" model="ir.rule">
<field name="name">Property multi-company</field> <field name="name">Property multi-company</field>
<field model="ir.model" name="model_id" ref="model_ir_property"/> <field name="model_id" ref="model_ir_property"/>
<field eval="True" name="global"/> <field eval="True" name="global"/>
<field name="domain_force">['|',('company_id','child_of',[user.company_id.id]),('company_id','=',False)]</field> <field name="domain_force">['|',('company_id','child_of',[user.company_id.id]),('company_id','=',False)]</field>
</record> </record>

View File

@ -4,7 +4,7 @@
<!-- Restrict modifications on ir.filters to owner only --> <!-- Restrict modifications on ir.filters to owner only -->
<record id="ir_filters_rule" model="ir.rule"> <record id="ir_filters_rule" model="ir.rule">
<field name="name">ir.filters.owner</field> <field name="name">ir.filters.owner</field>
<field model="ir.model" name="model_id" ref="model_ir_filters"/> <field name="model_id" ref="model_ir_filters"/>
<field name="domain_force">[('user_id','in',[False,user.id])]</field> <field name="domain_force">[('user_id','in',[False,user.id])]</field>
</record> </record>
</data> </data>

View File

@ -213,14 +213,14 @@ class ir_mail_server(osv.osv):
password=smtp_server.smtp_pass, encryption=smtp_server.smtp_encryption, password=smtp_server.smtp_pass, encryption=smtp_server.smtp_encryption,
smtp_debug=smtp_server.smtp_debug) smtp_debug=smtp_server.smtp_debug)
except Exception, e: except Exception, e:
raise osv.except_osv(_("Connection test failed!"), _("Here is what we got instead:\n %s") % tools.ustr(e)) raise osv.except_osv(_("Connection Test Failed!"), _("Here is what we got instead:\n %s") % tools.ustr(e))
finally: finally:
try: try:
if smtp: smtp.quit() if smtp: smtp.quit()
except Exception: except Exception:
# ignored, just a consequence of the previous exception # ignored, just a consequence of the previous exception
pass pass
raise osv.except_osv(_("Connection test succeeded!"), _("Everything seems properly set up!")) raise osv.except_osv(_("Connection Test Succeeded!"), _("Everything seems properly set up!"))
def connect(self, host, port, user=None, password=None, encryption=False, smtp_debug=False): def connect(self, host, port, user=None, password=None, encryption=False, smtp_debug=False):
"""Returns a new SMTP connection to the give SMTP server, authenticated """Returns a new SMTP connection to the give SMTP server, authenticated

View File

@ -82,7 +82,7 @@ class ir_model(osv.osv):
return [] return []
__, operator, value = domain[0] __, operator, value = domain[0]
if operator not in ['=', '!=']: if operator not in ['=', '!=']:
raise osv.except_osv(_('Invalid search criterions'), _('The osv_memory field can only be compared with = and != operator.')) raise osv.except_osv(_("Invalid Search Criteria"), _('The osv_memory field can only be compared with = and != operator.'))
value = bool(value) if operator == '=' else not bool(value) value = bool(value) if operator == '=' else not bool(value)
all_model_ids = self.search(cr, uid, [], context=context) all_model_ids = self.search(cr, uid, [], context=context)
is_osv_mem = self._is_osv_memory(cr, uid, all_model_ids, 'osv_memory', arg=None, context=context) is_osv_mem = self._is_osv_memory(cr, uid, all_model_ids, 'osv_memory', arg=None, context=context)

View File

@ -411,8 +411,8 @@ class ir_values(osv.osv):
(tuple(groups), uid)) (tuple(groups), uid))
if not cr.fetchone(): if not cr.fetchone():
if action['name'] == 'Menuitem': if action['name'] == 'Menuitem':
raise osv.except_osv('Error !', raise osv.except_osv('Error!',
'You do not have the permission to perform this operation !!!') 'You do not have the permission to perform this operation!!!')
continue continue
# keep only the first action registered for each action name # keep only the first action registered for each action name
results[action['name']] = (action['id'], action['name'], action_def) results[action['name']] = (action['id'], action['name'], action_def)

View File

@ -94,7 +94,7 @@ class wkf_activity(osv.osv):
def unlink(self, cr, uid, ids, context=None): def unlink(self, cr, uid, ids, context=None):
if context is None: context = {} if context is None: context = {}
if not context.get('_force_unlink') and self.pool.get('workflow.workitem').search(cr, uid, [('act_id', 'in', ids)]): if not context.get('_force_unlink') and self.pool.get('workflow.workitem').search(cr, uid, [('act_id', 'in', ids)]):
raise osv.except_osv(_('Operation forbidden'), raise osv.except_osv(_('Operation Forbidden'),
_('Please make sure no workitems refer to an activity before deleting it!')) _('Please make sure no workitems refer to an activity before deleting it!'))
super(wkf_activity, self).unlink(cr, uid, ids, context=context) super(wkf_activity, self).unlink(cr, uid, ids, context=context)

View File

@ -84,6 +84,12 @@
<field name="sequence">11</field> <field name="sequence">11</field>
</record> </record>
<record model="ir.module.category" id="module_category_survey">
<field name="name">Survey</field>
<field name="description">Lets you create, send, share and answer to surveys.</field>
<field name="sequence">11</field>
</record>
<record model="ir.module.category" id="module_category_marketing"> <record model="ir.module.category" id="module_category_marketing">
<field name="name">Marketing</field> <field name="name">Marketing</field>
<field name="description">Helps you manage your marketing campaigns step by step.</field> <field name="description">Helps you manage your marketing campaigns step by step.</field>

View File

@ -55,7 +55,7 @@ class base_module_import(osv.osv_memory):
try: try:
file_data = zipfile.ZipFile(fp, 'r') file_data = zipfile.ZipFile(fp, 'r')
except zipfile.BadZipfile: except zipfile.BadZipfile:
raise osv.except_osv(_('Error !'), _('File is not a zip file!')) raise osv.except_osv(_('Error!'), _('File is not a zip file!'))
init_file_name = sorted(file_data.namelist())[0] init_file_name = sorted(file_data.namelist())[0]
module_name = os.path.split(init_file_name)[0] module_name = os.path.split(init_file_name)[0]
@ -63,8 +63,8 @@ class base_module_import(osv.osv_memory):
try: try:
zip_file = open(file_path, 'wb') zip_file = open(file_path, 'wb')
except IOError: except IOError:
raise osv.except_osv(_('Error !'), raise osv.except_osv(_('Error!'),
_('Can not create the module file: %s !') % \ _('Can not create the module file: %s!') % \
(file_path,) ) (file_path,) )
zip_file.write(zip_data) zip_file.write(zip_data)
zip_file.close() zip_file.close()

View File

@ -81,7 +81,7 @@ class base_module_upgrade(osv.osv_memory):
(tuple(ids), ('uninstalled',))) (tuple(ids), ('uninstalled',)))
unmet_packages = [x[0] for x in cr.fetchall()] unmet_packages = [x[0] for x in cr.fetchall()]
if unmet_packages: if unmet_packages:
raise osv.except_osv(_('Unmet dependency !'), raise osv.except_osv(_('Unmet Dependency!'),
_('Following modules are not installed or unknown: %s') % ('\n\n' + '\n'.join(unmet_packages))) _('Following modules are not installed or unknown: %s') % ('\n\n' + '\n'.join(unmet_packages)))
ir_module.download(cr, uid, ids, context=context) ir_module.download(cr, uid, ids, context=context)

View File

@ -182,11 +182,11 @@ class lang(osv.osv):
for language in languages: for language in languages:
ctx_lang = context.get('lang') ctx_lang = context.get('lang')
if language['code']=='en_US': if language['code']=='en_US':
raise osv.except_osv(_('User Error'), _("Base Language 'en_US' can not be deleted !")) raise osv.except_osv(_('User Error'), _("Base Language 'en_US' can not be deleted!"))
if ctx_lang and (language['code']==ctx_lang): if ctx_lang and (language['code']==ctx_lang):
raise osv.except_osv(_('User Error'), _("You cannot delete the language which is User's Preferred Language !")) raise osv.except_osv(_('User Error'), _("You cannot delete the language which is User's Preferred Language!"))
if language['active']: if language['active']:
raise osv.except_osv(_('User Error'), _("You cannot delete the language which is Active !\nPlease de-activate the language first.")) raise osv.except_osv(_('User Error'), _("You cannot delete the language which is Active!\nPlease de-activate the language first."))
trans_obj = self.pool.get('ir.translation') trans_obj = self.pool.get('ir.translation')
trans_ids = trans_obj.search(cr, uid, [('lang','=',language['code'])], context=context) trans_ids = trans_obj.search(cr, uid, [('lang','=',language['code'])], context=context)
trans_obj.unlink(cr, uid, trans_ids, context=context) trans_obj.unlink(cr, uid, trans_ids, context=context)

View File

@ -120,7 +120,7 @@ class res_partner_category(osv.osv):
res = self.name_get(cr, uid, ids, context=context) res = self.name_get(cr, uid, ids, context=context)
return dict(res) return dict(res)
_description = 'Partner Categories' _description = 'Partner Tags'
_name = 'res.partner.category' _name = 'res.partner.category'
_columns = { _columns = {
'name': fields.char('Category Name', required=True, size=64, translate=True), 'name': fields.char('Category Name', required=True, size=64, translate=True),
@ -259,8 +259,8 @@ class res_partner(osv.osv, format_address):
'street2': fields.char('Street2', size=128), 'street2': fields.char('Street2', size=128),
'zip': fields.char('Zip', change_default=True, size=24), 'zip': fields.char('Zip', change_default=True, size=24),
'city': fields.char('City', size=128), 'city': fields.char('City', size=128),
'state_id': fields.many2one("res.country.state", 'State'), 'state_id': fields.many2one("res.country.state", 'State', ondelete='restrict'),
'country_id': fields.many2one('res.country', 'Country'), 'country_id': fields.many2one('res.country', 'Country', ondelete='restrict'),
'country': fields.related('country_id', type='many2one', relation='res.country', string='Country', 'country': fields.related('country_id', type='many2one', relation='res.country', string='Country',
deprecated="This field will be removed as of OpenERP 7.1, use country_id instead"), deprecated="This field will be removed as of OpenERP 7.1, use country_id instead"),
'email': fields.char('Email', size=240), 'email': fields.char('Email', size=240),
@ -575,7 +575,7 @@ class res_partner(osv.osv, format_address):
context = {} context = {}
name, email = self._parse_partner_name(name, context=context) name, email = self._parse_partner_name(name, context=context)
if context.get('force_email') and not email: if context.get('force_email') and not email:
raise osv.except_osv(_('Warning'), _("Couldn't create contact without email address !")) raise osv.except_osv(_('Warning'), _("Couldn't create contact without email address!"))
if not name and email: if not name and email:
name = email name = email
rec_id = self.create(cr, uid, {self._rec_name: name or email, 'email': email or False}, context=context) rec_id = self.create(cr, uid, {self._rec_name: name or email, 'email': email or False}, context=context)

View File

@ -139,7 +139,7 @@
</h1> </h1>
<field name="parent_id" <field name="parent_id"
placeholder="Company" placeholder="Company"
domain="[('is_company', '=', True)]" context="{'default_is_company': True, 'default_supplier': supplier}" domain="[('is_company', '=', True)]" context="{'default_is_company': True, 'default_supplier': supplier, 'default_customer': customer}"
attrs="{'invisible': [('is_company','=', True),('parent_id', '=', False)]}" attrs="{'invisible': [('is_company','=', True),('parent_id', '=', False)]}"
on_change="onchange_address(use_parent_address, parent_id)"/> on_change="onchange_address(use_parent_address, parent_id)"/>
<field name="category_id" widget="many2many_tags" placeholder="Tags..."/> <field name="category_id" widget="many2many_tags" placeholder="Tags..."/>
@ -188,7 +188,7 @@
<notebook colspan="4"> <notebook colspan="4">
<page string="Contacts" attrs="{'invisible': [('is_company','=',False), ('child_ids', '=', [])]}" autofocus="autofocus"> <page string="Contacts" attrs="{'invisible': [('is_company','=',False), ('child_ids', '=', [])]}" autofocus="autofocus">
<field name="child_ids" mode="kanban" context="{'default_parent_id': active_id, 'default_street': street, 'default_street2': street2, 'default_city': city, 'default_state_id': state_id, 'default_zip': zip, 'default_country_id': country_id, 'default_supplier': supplier}"> <field name="child_ids" mode="kanban" context="{'default_parent_id': active_id, 'default_street': street, 'default_street2': street2, 'default_city': city, 'default_state_id': state_id, 'default_zip': zip, 'default_country_id': country_id, 'default_supplier': supplier, 'default_customer': customer}">
<kanban> <kanban>
<field name="color"/> <field name="color"/>
<field name="name"/> <field name="name"/>
@ -288,6 +288,7 @@
</div> </div>
</group> </group>
<field name="supplier" invisible="True"/> <field name="supplier" invisible="True"/>
<field name="customer" invisible="True"/>
</sheet> </sheet>
</form> </form>
</field> </field>
@ -512,10 +513,10 @@
<!-- Categories --> <!-- Categories -->
<record id="view_partner_category_form" model="ir.ui.view"> <record id="view_partner_category_form" model="ir.ui.view">
<field name="name">Partner Categories</field> <field name="name">Partner Tags</field>
<field name="model">res.partner.category</field> <field name="model">res.partner.category</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="Partner Category" version="7.0"> <form string="Partner Tag" version="7.0">
<group col="4"> <group col="4">
<field name="name"/> <field name="name"/>
<field name="active"/> <field name="active"/>
@ -525,11 +526,11 @@
</field> </field>
</record> </record>
<record id="view_partner_category_list" model="ir.ui.view"> <record id="view_partner_category_list" model="ir.ui.view">
<field name="name">Partner Categories</field> <field name="name">Partner Tags</field>
<field name="model">res.partner.category</field> <field name="model">res.partner.category</field>
<field eval="6" name="priority"/> <field eval="6" name="priority"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="Partner Categories"> <tree string="Partner Tags">
<field name="complete_name"/> <field name="complete_name"/>
</tree> </tree>
</field> </field>
@ -539,7 +540,7 @@
<field name="model">res.partner.category</field> <field name="model">res.partner.category</field>
<field name="field_parent">child_ids</field> <field name="field_parent">child_ids</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree toolbar="1" string="Partner Categories"> <tree toolbar="1" string="Partner Tags">
<field name="name"/> <field name="name"/>
</tree> </tree>
</field> </field>
@ -558,7 +559,7 @@
--> -->
<record id="action_partner_by_category" model="ir.actions.act_window"> <record id="action_partner_by_category" model="ir.actions.act_window">
<field name="name">Partner Categories</field> <field name="name">Partner Tags</field>
<field name="res_model">res.partner</field> <field name="res_model">res.partner</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="view_mode">tree,form</field> <field name="view_mode">tree,form</field>
@ -575,11 +576,11 @@
</record> </record>
<record id="action_partner_category_form" model="ir.actions.act_window"> <record id="action_partner_category_form" model="ir.actions.act_window">
<field name="name">Partner Categories</field> <field name="name">Partner Tags</field>
<field name="type">ir.actions.act_window</field> <field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner.category</field> <field name="res_model">res.partner.category</field>
<field name="view_type">form</field> <field name="view_type">form</field>
<field name="help">Manage the partner categories in order to better classify them for tracking and analysis purposes. A partner may belong to several categories and categories have a hierarchy structure: a partner belonging to a category also belong to his parent category.</field> <field name="help">Manage the partner tags to better classify them for tracking and analysis purposes. A partner may have several tags and tags have a hierarchical structure: a partner with a tag has also the parent tags.</field>
</record> </record>
<menuitem action="action_partner_category_form" id="menu_partner_category_form" name="Partner Tags" sequence="4" parent="menu_config_address_book" groups="base.group_no_one"/> <menuitem action="action_partner_category_form" id="menu_partner_category_form" name="Partner Tags" sequence="4" parent="menu_config_address_book" groups="base.group_no_one"/>

View File

@ -16,7 +16,7 @@
<!-- Record Rule For Company --> <!-- Record Rule For Company -->
<record id="res_company_rule" model="ir.rule"> <record id="res_company_rule" model="ir.rule">
<field name="name">company rule</field> <field name="name">company rule</field>
<field model="ir.model" name="model_id" ref="model_res_company"/> <field name="model_id" ref="model_res_company"/>
<field eval="True" name="global"/> <field eval="True" name="global"/>
<!-- TODO: review this <field name="domain_force">['|', ('child_ids', 'child_of', [user.company_id.id]), ('parent_id', 'child_of', [user.company_id.id])]</field> --> <!-- TODO: review this <field name="domain_force">['|', ('child_ids', 'child_of', [user.company_id.id]), ('parent_id', 'child_of', [user.company_id.id])]</field> -->
<field name="domain_force">[('id','child_of',[user.company_id.id])]</field> <field name="domain_force">[('id','child_of',[user.company_id.id])]</field>
@ -25,7 +25,7 @@
<!-- Record Rule For User --> <!-- Record Rule For User -->
<record id="res_users_rule" model="ir.rule"> <record id="res_users_rule" model="ir.rule">
<field name="name">user rule</field> <field name="name">user rule</field>
<field model="ir.model" name="model_id" ref="model_res_users"/> <field name="model_id" ref="model_res_users"/>
<field eval="True" name="global"/> <field eval="True" name="global"/>
<field name="domain_force">[('company_ids','child_of',[user.company_id.id])]</field> <field name="domain_force">[('company_ids','child_of',[user.company_id.id])]</field>
</record> </record>

View File

@ -187,7 +187,7 @@
<field name="name"/> <field name="name"/>
<field name="login"/> <field name="login"/>
<field name="lang"/> <field name="lang"/>
<field name="date"/> <field name="login_date"/>
</tree> </tree>
</field> </field>
</record> </record>
@ -255,7 +255,7 @@
<field name="signature" readonly="0"/> <field name="signature" readonly="0"/>
</group> </group>
<footer> <footer>
<button name="preference_save" type="object" string="Save"/> <button name="preference_save" type="object" string="Save" class="oe_highlight"/>
or or
<button name="preference_cancel" string="Cancel" special="cancel" class="oe_link"/> <button name="preference_cancel" string="Cancel" special="cancel" class="oe_link"/>
</footer> </footer>

View File

@ -1,17 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<rng:grammar xmlns:rng="http://relaxng.org/ns/structure/1.0"> <rng:grammar xmlns:rng="http://relaxng.org/ns/structure/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<rng:define name="any"> <rng:define name="any">
<rng:element> <rng:element>
<rng:anyName/>
<rng:zeroOrMore>
<rng:choice>
<rng:attribute>
<rng:anyName/> <rng:anyName/>
</rng:attribute> <rng:zeroOrMore>
<rng:text/> <rng:choice>
<rng:ref name="any"/> <rng:attribute>
</rng:choice> <rng:anyName/>
</rng:zeroOrMore> </rng:attribute>
<rng:text/>
<rng:ref name="any"/>
</rng:choice>
</rng:zeroOrMore>
</rng:element> </rng:element>
</rng:define> </rng:define>
@ -125,19 +126,66 @@
<rng:define name="field"> <rng:define name="field">
<rng:element name="field"> <rng:element name="field">
<rng:attribute name="name" /> <rng:attribute name="name" />
<rng:optional><rng:attribute name="type"/></rng:optional> <rng:choice>
<rng:optional><rng:attribute name="ref"/></rng:optional> <rng:group>
<rng:optional><rng:attribute name="eval"/></rng:optional> <rng:attribute name="type">
<rng:optional><rng:attribute name="domain"/></rng:optional> <rng:choice>
<rng:optional><rng:attribute name="search"/></rng:optional> <rng:value>char</rng:value>
<rng:optional><rng:attribute name="model"/></rng:optional> <rng:value>file</rng:value>
<rng:optional><rng:attribute name="use"/></rng:optional> </rng:choice>
<rng:oneOrMore> </rng:attribute>
<rng:choice>
<rng:ref name="any"/>
<rng:text/> <rng:text/>
</rng:choice> </rng:group>
</rng:oneOrMore> <rng:group>
<rng:attribute name="type"><rng:value>int</rng:value></rng:attribute>
<rng:choice>
<rng:data type="int"/>
<rng:value>None</rng:value>
</rng:choice>
</rng:group>
<rng:group>
<rng:attribute name="type"><rng:value>float</rng:value></rng:attribute>
<rng:data type="float"/>
</rng:group>
<rng:group>
<rng:attribute name="type">
<rng:choice>
<rng:value>list</rng:value>
<rng:value>tuple</rng:value>
</rng:choice>
</rng:attribute>
<rng:oneOrMore><rng:ref name="value"/></rng:oneOrMore>
</rng:group>
<rng:group>
<rng:attribute name="type">
<rng:choice>
<rng:value>html</rng:value>
<rng:value>xml</rng:value>
</rng:choice>
</rng:attribute>
<rng:oneOrMore>
<rng:ref name="any"/>
</rng:oneOrMore>
</rng:group>
<rng:group>
<rng:attribute name="ref"/>
<rng:empty/>
</rng:group>
<rng:group>
<rng:attribute name="eval"/>
<rng:optional><rng:attribute name="model"/></rng:optional>
<rng:empty/>
</rng:group>
<rng:group>
<rng:attribute name="search"/>
<rng:optional><rng:attribute name="model"/></rng:optional>
<rng:optional><rng:attribute name="use"/></rng:optional>
<rng:empty/>
</rng:group>
<rng:group>
<rng:text/>
</rng:group>
</rng:choice>
</rng:element> </rng:element>
</rng:define> </rng:define>

View File

@ -282,6 +282,9 @@ class browse_null(object):
def __unicode__(self): def __unicode__(self):
return u'' return u''
def __iter__(self):
raise NotImplementedError("Iteration is not allowed on %s" % self)
# #
# TODO: execute an object method on browse_record_list # TODO: execute an object method on browse_record_list
@ -2971,7 +2974,7 @@ class BaseModel(object):
update_custom_fields = context.get('update_custom_fields', False) update_custom_fields = context.get('update_custom_fields', False)
self._field_create(cr, context=context) self._field_create(cr, context=context)
create = not self._table_exist(cr) create = not self._table_exist(cr)
if getattr(self, '_auto', True): if self._auto:
if create: if create:
self._create_table(cr) self._create_table(cr)
@ -3205,7 +3208,8 @@ class BaseModel(object):
cr.commit() # start a new transaction cr.commit() # start a new transaction
self._add_sql_constraints(cr) if self._auto:
self._add_sql_constraints(cr)
if create: if create:
self._execute_sql(cr) self._execute_sql(cr)

View File

@ -197,7 +197,7 @@ def exp_drop(db_name):
return True return True
@contextlib.contextmanager @contextlib.contextmanager
def _set_pg_password_in_environment(self): def _set_pg_password_in_environment():
""" On systems where pg_restore/pg_dump require an explicit """ On systems where pg_restore/pg_dump require an explicit
password (i.e. when not connecting via unix sockets, and most password (i.e. when not connecting via unix sockets, and most
importantly on Windows), it is necessary to pass the PG user importantly on Windows), it is necessary to pass the PG user
@ -213,10 +213,10 @@ def _set_pg_password_in_environment(self):
SaaS (giving SaaS users the super-admin password is not a good idea SaaS (giving SaaS users the super-admin password is not a good idea
anyway) anyway)
""" """
if os.environ.get('PGPASSWORD') or not tools.config['db_password']: if os.environ.get('PGPASSWORD') or not openerp.tools.config['db_password']:
yield yield
else: else:
os.environ['PGPASSWORD'] = tools.config['db_password'] os.environ['PGPASSWORD'] = openerp.tools.config['db_password']
try: try:
yield yield
finally: finally:

View File

@ -48,6 +48,7 @@ except:
from datetime import datetime, timedelta from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
from lxml import etree from lxml import etree
import misc import misc
from config import config from config import config
@ -86,7 +87,9 @@ def _get_idref(self, cr, uid, model_str, context, idref):
idref2 = dict(idref, idref2 = dict(idref,
time=time, time=time,
DateTime=datetime, DateTime=datetime,
datetime=datetime,
timedelta=timedelta, timedelta=timedelta,
relativedelta=relativedelta,
version=openerp.release.major_version, version=openerp.release.major_version,
ref=_ref(self, cr), ref=_ref(self, cr),
pytz=pytz) pytz=pytz)