This file is indexed.

/usr/lib/python2.7/dist-packages/stetl/postgis.py is in python-stetl 1.1+ds-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# -*- coding: utf-8 -*-
#
# PostGIS support wrapper.
#
# Author: Just van den Broecke
#
from util import Util

log = Util.get_log("postgis")

try:
    import psycopg2
    import psycopg2.extensions
except ImportError:
    log.error("cannot find package psycopg2 for Postgres client support, please install psycopg2 first!")
    # sys.exit(-1)


class PostGIS:
    def __init__(self, config):
        # Lees de configuratie
        self.config = config
        self.e = None

    def initialiseer(self, bestand):
        log.info('Connecting...')
        self.connect(True)

        log.info('executing sql script...')
        try:
            script = open(bestand, 'r').read()
            self.cursor.execute(script)
            self.connection.commit()
            log.info('script executed')
        except psycopg2.DatabaseError as e:
            log.warn("error '%s' from script '%s'" % (str(e), str(bestand)))

    def connect(self, initdb=False):
        try:
            conn_str = "dbname=%s user=%s host=%s port=%s" % (self.config['database'],
                                                              self.config['user'],
                                                              self.config.get('host', 'localhost'),
                                                              self.config.get('port', '5432'))
            log.info('Connecting to %s' % conn_str)
            conn_str += ' password=%s' % self.config['password']
            self.connection = psycopg2.connect(conn_str)
            self.cursor = self.connection.cursor()

            self.set_schema()
            log.debug("Connected to database %s" % (self.config['database']))
        except Exception as e:
            log.error("Cannot connect to database '%s' e=%s" % (self.config['database'], str(e)))

    def disconnect(self):
        self.e = None
        try:
            self.connection.close()
        except Exception as e:
            self.e = e
            log.error("error %s in close" % (str(e)))

        return self.e

    def commit(self, close=True):
        self.e = None
        try:
            self.connection.commit()
            if close is True:
                self.connection.close()
        except Exception as e:
            self.e = e
            log.error("error %s in commit" % (str(e)))

        return self.e

    def create_schema(self):
        # Public schema: no further action required
        if self.config['schema'] != 'public':
            # A specific schema is required create it and set the search path
            self.execute('''DROP SCHEMA IF EXISTS %s CASCADE;''' % self.config['schema'])
            self.execute('''CREATE SCHEMA %s;''' % self.config['schema'])
            self.connection.commit()

    def set_schema(self):
        # Non-public schema set search path
        if self.config['schema'] != 'public':
            # Always set search path to our schema
            self.execute('SET search_path TO %s,public' % self.config['schema'])
            self.connection.commit()

    def log_action(self, action, bestand="n.v.t", bericht='geen', error=False):
        sql = "INSERT INTO stetl_log(actie, bestand, error, bericht) VALUES (%s, %s, %s, %s)"
        parameters = (action, bestand, error, bericht)
        self.tx_execute(sql, parameters)

    def log_meta(self, key, value):
        sql = "INSERT INTO stetl_info(sleutel, waarde) VALUES (%s, %s)"
        parameters = (key, value)
        self.tx_execute(sql, parameters)

    def make_bytea(self, blob):
        return psycopg2.Binary(blob)

    def get_column_names(self, table, schema='public'):
        self.cursor.execute(
            "select column_name from information_schema.columns where table_schema = '%s' and table_name='%s'" % (schema, table))
        column_names = [row[0] for row in self.cursor]
        return column_names

    def execute(self, sql, parameters=None):
        try:
            if parameters:
                self.cursor.execute(sql, parameters)
            else:
                self.cursor.execute(sql)

                # log.debug(self.cursor.statusmessage)
        except Exception as e:
            log.error("error %s in query: %s with params: %s" % (str(e), str(sql), str(parameters)))
            #            self.log_actie("uitvoeren_db", "n.v.t", "fout=%s" % str(e), True)
            return -1

        return self.cursor.rowcount

    def file_execute(self, sqlfile):
        self.e = None
        try:
            log.info("Executing SQL of file = %s ..." % sqlfile)
            self.connect()
            f = open(sqlfile, 'r')
            sql = f.read()
            self.execute(sql)
            self.connection.commit()
            f.close()
            log.info("SQL executed OK")
        except Exception as e:
            self.e = e
            self.log_action("file_execute", "n.v.t", "fout=%s" % str(e), True)
            log.warn("can't execute SQL script, error: %s" % (str(e)))

    def tx_execute(self, sql, parameters=None):
        self.e = None
        try:
            self.connect()
            self.execute(sql, parameters)
            self.connection.commit()
            self.connection.close()

            # log.debug(self.cursor.statusmessage)
        except Exception as e:
            self.e = e
            log.error("error %s in transaction: %s with parms: %s" % (str(e), str(sql), str(parameters)))

        return self.cursor.rowcount