def exp_drop(self, db_name): if db_name not in self.exp_list(True): return False openerp.modules.registry.RegistryManager.delete(db_name) sql_db.close_db(db_name) db = sql_db.db_connect('postgres') cr = db.cursor() cr.autocommit(True) # avoid transaction block try: # Try to terminate all other connections that might prevent # dropping the database try: # PostgreSQL 9.2 renamed pg_stat_activity.procpid to pid: # http://www.postgresql.org/docs/9.2/static/release-9-2.html#AEN110389 pid_col = 'pid' if cr._cnx.server_version >= 90200 else 'procpid' cr.execute("""SELECT pg_terminate_backend(%(pid_col)s) FROM pg_stat_activity WHERE datname = %%s AND %(pid_col)s != pg_backend_pid()""" % {'pid_col': pid_col}, (db_name,)) except Exception: pass try: cr.execute('DROP DATABASE "%s"' % db_name) except Exception, e: _logger.error('DROP DB: %s failed:\n%s', db_name, e) raise Exception("Couldn't drop database %s: %s" % (db_name, e)) else:
def exp_drop(self, db_name): if db_name not in self.exp_list(True): return False openerp.modules.registry.RegistryManager.delete(db_name) sql_db.close_db(db_name) db = sql_db.db_connect('postgres') cr = db.cursor() cr.autocommit(True) # avoid transaction block try: # Try to terminate all other connections that might prevent # dropping the database try: # PostgreSQL 9.2 renamed pg_stat_activity.procpid to pid: # http://www.postgresql.org/docs/9.2/static/release-9-2.html#AEN110389 pid_col = 'pid' if cr._cnx.server_version >= 90200 else 'procpid' cr.execute( """SELECT pg_terminate_backend(%(pid_col)s) FROM pg_stat_activity WHERE datname = %%s AND %(pid_col)s != pg_backend_pid()""" % {'pid_col': pid_col}, (db_name, )) except Exception: pass try: cr.execute('DROP DATABASE "%s"' % db_name) except Exception, e: _logger.error('DROP DB: %s failed:\n%s', db_name, e) raise Exception("Couldn't drop database %s: %s" % (db_name, e)) else:
def exp_drop(self, db_name): if not self.exp_db_exist(db_name): return False openerp.modules.registry.RegistryManager.delete(db_name) sql_db.close_db(db_name) db = sql_db.db_connect('template1') cr = db.cursor() cr.autocommit(True) # avoid transaction block try: # Try to terminate all other connections that might prevent # dropping the database try: cr.execute("""SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = %s AND procpid != pg_backend_pid()""", (db_name,)) except Exception: pass try: cr.execute('DROP DATABASE "%s"' % db_name) except Exception, e: _logger.error('DROP DB: %s failed:\n%s', db_name, e) raise Exception("Couldn't drop database %s: %s" % (db_name, e)) else:
def exp_duplicate_database(self, db_original_name, db_name): _logger.info('Duplicate database `%s` to `%s`.', db_original_name, db_name) sql_db.close_db(db_original_name) db = sql_db.db_connect('postgres') cr = db.cursor() try: cr.autocommit(True) # avoid transaction block cr.execute("""CREATE DATABASE "%s" ENCODING 'unicode' TEMPLATE "%s" """ % (db_name, db_original_name)) finally: cr.close() return True
def exp_rename(self, old_name, new_name): openerp.modules.registry.RegistryManager.delete(old_name) sql_db.close_db(old_name) db = sql_db.db_connect('postgres') cr = db.cursor() cr.autocommit(True) # avoid transaction block try: try: cr.execute('ALTER DATABASE "%s" RENAME TO "%s"' % (old_name, new_name)) except Exception, e: _logger.error('RENAME DB: %s -> %s failed:\n%s', old_name, new_name, e) raise Exception("Couldn't rename database %s to %s: %s" % (old_name, new_name, e)) else:
def exp_rename(self, old_name, new_name): openerp.modules.registry.RegistryManager.delete(old_name) sql_db.close_db(old_name) db = sql_db.db_connect('template1') cr = db.cursor() cr.autocommit(True) # avoid transaction block try: try: cr.execute('ALTER DATABASE "%s" RENAME TO "%s"' % (old_name, new_name)) except Exception, e: _logger.error('RENAME DB: %s -> %s failed:\n%s', old_name, new_name, e) raise Exception("Couldn't rename database %s to %s: %s" % (old_name, new_name, e)) else:
def exp_drop(self, db_name): openerp.modules.registry.RegistryManager.delete(db_name) sql_db.close_db(db_name) db = sql_db.db_connect('template1') cr = db.cursor() cr.autocommit(True) # avoid transaction block try: try: cr.execute('DROP DATABASE "%s"' % db_name) except Exception, e: _logger.error('DROP DB: %s failed:\n%s', db_name, e) raise Exception("Couldn't drop database %s: %s" % (db_name, e)) else:
def exp_rename(self, old_name, new_name): sql_db.close_db(old_name) openerp.netsvc.Agent.cancel(db_name) logger = netsvc.Logger() db = sql_db.db_connect('template1') cr = db.cursor() cr.autocommit(True) # avoid transaction block try: try: cr.execute('ALTER DATABASE "%s" RENAME TO "%s"' % (old_name, new_name)) except Exception, e: logger.notifyChannel("web-services", netsvc.LOG_ERROR, 'RENAME DB: %s -> %s failed:\n%s' % (old_name, new_name, e)) raise Exception("Couldn't rename database %s to %s: %s" % (old_name, new_name, e)) else:
def exp_drop(self, db_name): sql_db.close_db(db_name) openerp.netsvc.Agent.cancel(db_name) logger = netsvc.Logger() db = sql_db.db_connect('template1') cr = db.cursor() cr.autocommit(True) # avoid transaction block try: try: cr.execute('DROP DATABASE "%s"' % db_name) except Exception, e: logger.notifyChannel("web-services", netsvc.LOG_ERROR, 'DROP DB: %s failed:\n%s' % (db_name, e)) raise Exception("Couldn't drop database %s: %s" % (db_name, e)) else:
def exp_drop(self, db_name): if db_name not in self.exp_list(True): return False openerp.modules.registry.RegistryManager.delete(db_name) sql_db.close_db(db_name) db = sql_db.db_connect('postgres') cr = db.cursor() try: cr.autocommit(True) # avoid transaction block _drop_conn(cr, db_name) try: cr.execute('DROP DATABASE "%s"' % db_name) except Exception, e: _logger.error('DROP DB: %s failed:\n%s', db_name, e) raise Exception("Couldn't drop database %s: %s" % (db_name, e)) else:
def index(self, req, action, token): action = simplejson.loads(action) report_srv = req.session.proxy("report") context = dict(req.context) context.update(action["context"]) report_data = {} report_ids = context["active_ids"] if 'report_type' in action: report_data['report_type'] = action['report_type'] if 'datas' in action: if 'ids' in action['datas']: report_ids = action['datas'].pop('ids') report_data.update(action['datas']) report_id = report_srv.report( req.session._db, req.session._uid, req.session._password, action["report_name"], report_ids, report_data, context) report_struct = None while True: report_struct = report_srv.report_get( req.session._db, req.session._uid, req.session._password, report_id) if report_struct["state"]: break time.sleep(self.POLLING_DELAY) report = base64.b64decode(report_struct['result']) if report_struct.get('code') == 'zlib': report = zlib.decompress(report) report_mimetype = self.TYPES_MAPPING.get( report_struct['format'], 'octet-stream') file_name = action.get('name', 'report') if 'name' not in action: reports = req.session.model('ir.actions.report.xml') res_id = reports.search([('report_name', '=', action['report_name']),], 0, False, False, context) if len(res_id) > 0: file_name = reports.read(res_id[0], ['name'], context)['name'] else: file_name = action['report_name'] # This is to get the reference name of the purchase order purchase_order_name = context["active_id"] purchase_uid = context["uid"] if file_name == 'Purchase Order': dbname = req.session._db db = sql_db.db_connect(dbname) cr = db.cursor() pool = pooler.get_pool(cr.dbname) purchase_order_obj = pool['purchase.order'].browse(cr,purchase_uid, purchase_order_name, context) print purchase_order_obj.name sql_db.close_db(dbname) file_name = dbname+'_'+purchase_order_obj.name # This is to get the reference name of the request for quotation purchase_order_name = context["active_id"] purchase_uid = context["uid"] if file_name == 'Request for Quotation': dbname = req.session._db db = sql_db.db_connect(dbname) cr = db.cursor() pool = pooler.get_pool(cr.dbname) purchase_order_obj = pool['purchase.order'].browse(cr,purchase_uid, purchase_order_name, context) print purchase_order_obj.name sql_db.close_db(dbname) file_name = dbname+ purchase_order_obj.name # This is to get the reference name of the sale quotation sale_order_name = context["active_id"] sale_uid = context["uid"] if file_name == 'Quotation / Order': dbname = req.session._db db = sql_db.db_connect(dbname) cr = db.cursor() pool = pooler.get_pool(cr.dbname) sale_order_obj = pool['sale.order'].browse(cr,sale_uid, sale_order_name, context) so_name=sale_order_obj.name sql_db.close_db(dbname) file_name = dbname+'_QO-'+ so_name[3:] # This is to get the reference name of the sale quotation sale_order_name = context["active_id"] sale_uid = context["uid"] if file_name == 'Sale Quotation': dbname = req.session._db db = sql_db.db_connect(dbname) cr = db.cursor() pool = pooler.get_pool(cr.dbname) sale_order_obj = pool['sale.order'].browse(cr,sale_uid, sale_order_name, context) print sale_order_obj.name sql_db.close_db(dbname) file_name = dbname+'_'+sale_order_obj.name # This is to get the reference name of the sale quotation with logo sale_order_name = context["active_id"] sale_uid = context["uid"] if file_name == 'Sale Quotation With Logo': dbname = req.session._db db = sql_db.db_connect(dbname) cr = db.cursor() pool = pooler.get_pool(cr.dbname) sale_order_obj = pool['sale.order'].browse(cr,sale_uid, sale_order_name, context) print sale_order_obj.name sql_db.close_db(dbname) file_name = dbname+'_'+sale_order_obj.name file_name = '%s.%s' % (file_name , report_struct['format']) return req.make_response(report, headers=[ ('Content-Disposition', content_disposition(file_name, req)), ('Content-Type', report_mimetype), ('Content-Length', len(report))], cookies={'fileToken': token})