[MERGE] forward port branch 8.0 up to f431cee99a
This commit is contained in:
@@ -82,7 +82,7 @@ class Usb(Escpos):
|
||||
|
||||
def _raw(self, msg):
|
||||
""" Print any command sent in raw format """
|
||||
if len(msg) != self.device.write(self.out_ep, msg, self.interface):
|
||||
if len(msg) != self.device.write(self.out_ep, msg, self.interface, timeout=5000):
|
||||
self.device.write(self.out_ep, self.errorText, self.interface)
|
||||
raise TicketNotPrinted()
|
||||
|
||||
|
||||
@@ -11,7 +11,8 @@ class TestMassMailing(osv.TransientModel):
|
||||
_columns = {
|
||||
'email_to': fields.char('Recipients', required=True,
|
||||
help='Comma-separated list of email addresses.'),
|
||||
'mass_mailing_id': fields.many2one('mail.mass_mailing', 'Mailing', required=True),
|
||||
'mass_mailing_id': fields.many2one(
|
||||
'mail.mass_mailing', 'Mailing', required=True, ondelete='cascade'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
|
||||
+636
-230
File diff suppressed because it is too large
Load Diff
@@ -687,6 +687,15 @@ class module(osv.osv):
|
||||
if not self.pool['res.users'].has_group(cr, uid, 'base.group_system'):
|
||||
raise openerp.exceptions.AccessDenied()
|
||||
|
||||
# One-click install is opt-in - cfr Issue #15225
|
||||
ad_dir = openerp.tools.config.addons_data_dir
|
||||
if not os.access(ad_dir, os.W_OK):
|
||||
msg = (_("Automatic install of downloaded Apps is currently disabled.") + "\n\n" +
|
||||
_("To enable it, make sure this directory exists and is writable on the server:") +
|
||||
"\n%s" % ad_dir)
|
||||
_logger.warning(msg)
|
||||
raise openerp.exceptions.AccessError(msg)
|
||||
|
||||
apps_server = urlparse.urlparse(self.get_apps_server(cr, uid, context=context))
|
||||
|
||||
OPENERP = openerp.release.product_name.lower()
|
||||
|
||||
@@ -74,6 +74,12 @@ class test_inherits(common.TransactionCase):
|
||||
self.assertIn(daughter, partner_demo.daughter_ids)
|
||||
|
||||
# search the partner from the daughter record
|
||||
partners = self.env['res.partner'].search([('daughter_ids', 'like', 'not existing daugther')])
|
||||
self.assertFalse(partners)
|
||||
partners = self.env['res.partner'].search([('daughter_ids', 'not like', 'not existing daugther')])
|
||||
self.assertIn(partner_demo, partners)
|
||||
partners = self.env['res.partner'].search([('daughter_ids', '!=', False)])
|
||||
self.assertIn(partner_demo, partners)
|
||||
partners = self.env['res.partner'].search([('daughter_ids', 'in', daughter.ids)])
|
||||
self.assertIn(partner_demo, partners)
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@ def initialize_sys_path():
|
||||
global hooked
|
||||
|
||||
dd = tools.config.addons_data_dir
|
||||
if dd not in ad_paths:
|
||||
if os.access(dd, os.R_OK) and dd not in ad_paths:
|
||||
ad_paths.append(dd)
|
||||
|
||||
for ad in tools.config['addons_path'].split(','):
|
||||
|
||||
@@ -982,7 +982,14 @@ class expression(object):
|
||||
|
||||
if call_null:
|
||||
o2m_op = 'in' if operator in NEGATIVE_TERM_OPERATORS else 'not in'
|
||||
push(create_substitution_leaf(leaf, ('id', o2m_op, select_distinct_from_where_not_null(cr, column._fields_id, comodel._table)), model))
|
||||
# determine ids from column._fields_id
|
||||
if comodel._fields[column._fields_id].store:
|
||||
ids1 = select_distinct_from_where_not_null(cr, column._fields_id, comodel._table)
|
||||
else:
|
||||
ids2 = comodel.search(cr, uid, [(column._fields_id, '!=', False)], context=context)
|
||||
recs = comodel.browse(cr, SUPERUSER_ID, ids2, {'prefetch_fields': False})
|
||||
ids1 = recs.mapped(column._fields_id).ids
|
||||
push(create_substitution_leaf(leaf, ('id', o2m_op, ids1), model))
|
||||
|
||||
elif column._type == 'many2many':
|
||||
rel_table, rel_id1, rel_id2 = column._sql_names(model)
|
||||
|
||||
@@ -630,10 +630,11 @@ class configmanager(object):
|
||||
def addons_data_dir(self):
|
||||
d = os.path.join(self['data_dir'], 'addons', release.series)
|
||||
if not os.path.exists(d):
|
||||
os.makedirs(d, 0700)
|
||||
else:
|
||||
assert os.access(d, os.W_OK), \
|
||||
"%s: directory is not writable" % d
|
||||
try:
|
||||
# try to make +rx placeholder dir, will need manual +w to activate it
|
||||
os.makedirs(d, 0500)
|
||||
except OSError:
|
||||
logging.getLogger(__name__).debug('Failed to create addons data dir %s', d)
|
||||
return d
|
||||
|
||||
@property
|
||||
|
||||
Reference in New Issue
Block a user