# -*- coding: utf-8 -*-1# This program is free software; you can redistribute it and/or modify2# it under the terms of the GNU General Public License as published by3# the Free Software Foundation; either version 2 of the License, or4# (at your option) any later version.5#6# This program is distributed in the hope that it will be useful,7# but WITHOUT ANY WARRANTY; without even the implied warranty of8# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the9# GNU General Public License for more details.10#11# You should have received a copy of the GNU General Public License12# along with this program; if not, write to the Free Software13# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,14# MA 02110-1301, USA.15#16# Author: Mauro Soria1718import psycopg1920from lib.core.exceptions import InvalidURLException21from lib.core.settings import DB_CONNECTION_TIMEOUT22from lib.report.factory import BaseReport, SQLReportMixin232425class PostgreSQLReport(SQLReportMixin, BaseReport):26__format__ = "sql"27__extension__ = None28_reuse = True2930def is_valid(self, url):31return url.startswith(("postgres://", "postgresql://"))3233def connect(self, url):34if not self.is_valid(url):35raise InvalidURLException("Provided PostgreSQL URL does not start with postgresql://")3637return psycopg.connect(url, connect_timeout=DB_CONNECTION_TIMEOUT)383940