def exec_report(name, data, direct_print=False, email_print=False, email=None, context=None): if context is None: context = {} if email is None: email = {} data = data.copy() ctx = rpc.CONTEXT.copy() ctx.update(context) ctx['direct_print'] = direct_print ctx['email_print'] = email_print ctx['email'] = email args = ('report', name, 'execute', data.get('ids', []), data, ctx) try: res = RPCProgress('execute', args).run() except RPCException: return False if not res: return False (type, data, print_p, name) = res if not print_p and direct_print: print_p = True dtemp = tempfile.mkdtemp(prefix='tryton_') fp_name = os.path.join(dtemp, slugify(name) + os.extsep + slugify(type)) with open(fp_name, 'wb') as file_d: file_d.write(data) if email_print: mailto(to=email.get('to'), cc=email.get('cc'), subject=email.get('subject'), body=email.get('body'), attachment=fp_name) else: file_open(fp_name, type, print_p=print_p) return True
def __init__(self, hostname, port, database): from tryton.common import slugify if Server.instance: Server.instance.stop() self.hostname = slugify(hostname).lower() self.port = port self.database = slugify(database) self.config = os.path.join(get_config_dir(), '%s@%s@%s' % (self.hostname, self.port, self.database)) self.tmpdir = tempfile.mkdtemp(prefix='.tryton') Server.instance = self
def __init__(self, hostname, port, database): from tryton.common import slugify if Server.instance: Server.instance.stop() self.hostname = slugify(hostname) self.port = port self.database = slugify(database) self.config = os.path.join(get_config_dir(), '%s@%s@%s' % (self.hostname, self.port, self.database)) self.tmpdir = tempfile.mkdtemp(prefix='.tryton') Server.instance = self
def exec_report(name, data, direct_print=False, email_print=False, email=None, context=None): if context is None: context = {} if email is None: email = {} data = data.copy() ctx = rpc.CONTEXT.copy() ctx.update(context) ctx['direct_print'] = direct_print ctx['email_print'] = email_print ctx['email'] = email args = ('report', name, 'execute', data.get('ids', []), data, ctx) try: res = RPCProgress('execute', args).run() except RPCException: return False if not res: return False (types, datas, print_p, names) = res fp_names = [] if not print_p and direct_print: print_p = True dtemp = tempfile.mkdtemp(prefix='tryton_') # ABE : #5658 : Manage multiple attachments if type(names) is not list: names = [names] if type(datas) is not list: datas = [datas] if type(types) is not list: types = [types] for data, name, type_ in zip(datas, names, types): fp_name = os.path.join(dtemp, slugify(name) + os.extsep + slugify(type_)) with open(fp_name, 'wb') as file_d: file_d.write(data) fp_names.append((fp_name, type_)) if email_print: mailto(to=email.get('to'), cc=email.get('cc'), bcc=email.get('bcc'), subject=email.get('subject'), body=email.get('body'), attachment=','.join([x[0] for x in fp_names])) else: for fp_name, type_ in fp_names: file_open(fp_name, type_, print_p=print_p) return True
def response(self, dialog, response): if response == Gtk.ResponseType.OK: fields = [] fields2 = [] iter = self.model2.get_iter_first() while iter: fields.append(self.model2.get_value(iter, 1)) fields2.append(self.model2.get_value(iter, 0)) iter = self.model2.iter_next(iter) action = self.saveas.get_active() try: data = RPCExecute('model', self.model, 'export_data', self.ids, fields, context=self.context) except RPCException: data = [] if action == 0: fileno, fname = tempfile.mkstemp( '.csv', common.slugify(self.name) + '_') self.export_csv(fname, fields2, data, popup=False) os.close(fileno) common.file_open(fname, 'csv') else: fname = common.file_selection( _('Save As...'), action=Gtk.FileChooserAction.SAVE) if fname: self.export_csv(fname, fields2, data) self.destroy()
def do_export(self, widget, export): if not self.modified_save(): return if (self.screen.current_view and self.screen.current_view.view_type == 'tree' and self.screen.current_view.children_field): ids = [r.id for r in self.screen.listed_records] paths = self.screen.listed_paths else: ids = [r.id for r in self.screen.selected_records] paths = self.screen.selected_paths fields = [f['name'] for f in export['export_fields.']] data = RPCExecute( 'model', self.model, 'export_data', ids, fields, context=self.screen.context) delimiter = ',' if os.name == 'nt' and ',' == locale.localeconv()['decimal_point']: delimiter = ';' fileno, fname = tempfile.mkstemp( '.csv', common.slugify(export['name']) + '_') with open(fname, 'w') as fp: writer = csv.writer(fp, delimiter=delimiter) writer.writerow(fields) for row, path in zip_longest(data, paths or []): indent = len(path) - 1 if path else 0 if row: writer.writerow(WinExport.format_row(row, indent=indent)) os.close(fileno) common.file_open(fname, 'csv')
def sig_open(self, widget=None): if not self.filename_field: return dtemp = tempfile.mkdtemp(prefix='tryton_') filename = self.filename_field.get(self.record) if not filename: return root, ext = os.path.splitext(filename) filename = ''.join([slugify(root), os.extsep, slugify(ext)]) file_path = os.path.join(dtemp, filename) with open(file_path, 'wb') as fp: fp.write(self.field.get_data(self.record)) root, type_ = os.path.splitext(filename) if type_: type_ = type_[1:] file_open(file_path, type_)
def response(self, dialog, response): if response == Gtk.ResponseType.OK: fields = [] fields2 = [] iter = self.model2.get_iter_first() while iter: fields.append(self.model2.get_value(iter, 1)) fields2.append(self.model2.get_value(iter, 0)) iter = self.model2.iter_next(iter) if self.selected_records.get_active(): ids = [r.id for r in self.screen.selected_records] paths = self.screen.selected_paths try: data = RPCExecute( 'model', self.model, 'export_data', ids, fields, context=self.context) except RPCException: data = [] elif self.screen_is_tree: ids = [r.id for r in self.screen.listed_records] paths = self.screen.listed_paths try: data = RPCExecute( 'model', self.model, 'export_data', ids, fields, context=self.context) except RPCException: data = [] else: paths = None domain = self.screen.search_domain( self.screen.screen_container.get_text()) if self.ignore_search_limit.get_active(): offset, limit = 0, None else: offset, limit = self.screen.offset, self.screen.limit try: data = RPCExecute( 'model', self.model, 'export_data_domain', domain, fields, offset, limit, self.screen.order, context=self.context) except RPCException: data = [] if self.saveas.get_active(): fname = common.file_selection(_('Save As...'), action=Gtk.FileChooserAction.SAVE) if fname: self.export_csv(fname, fields2, data, paths) else: fileno, fname = tempfile.mkstemp( '.csv', common.slugify(self.name) + '_') self.export_csv(fname, fields2, data, paths, popup=False) os.close(fileno) common.file_open(fname, 'csv') self.destroy()
def open_binary(self, renderer, path): if not self.filename: return dtemp = tempfile.mkdtemp(prefix='tryton_') record, field = self._get_record_field(path) filename_field = record.group.fields.get(self.filename) filename = filename_field.get(record) if not filename: return root, ext = os.path.splitext(filename) filename = ''.join([slugify(root), os.extsep, slugify(ext)]) file_path = os.path.join(dtemp, filename) with open(file_path, 'wb') as fp: if hasattr(field, 'get_data'): fp.write(field.get_data(record)) else: fp.write(field.get(record)) root, type_ = os.path.splitext(filename) if type_: type_ = type_[1:] file_open(file_path, type_)
def do_export(self, widget, export): if not self.modified_save(): return ids = [r.id for r in self.screen.selected_records] fields = [f['name'] for f in export['export_fields.']] data = RPCExecute( 'model', self.model, 'export_data', ids, fields, context=self.screen.context) delimiter = ',' if os.name == 'nt' and ',' == locale.localeconv()['decimal_point']: delimiter = ';' fileno, fname = tempfile.mkstemp( '.csv', common.slugify(export['name']) + '_') with open(fname, 'w') as fp: writer = csv.writer(fp, delimiter=delimiter) writer.writerow(fields) writer.writerows(data) os.close(fileno) common.file_open(fname, 'csv')