Ejemplo n.º 1
0
    def _get_installed_version(self):
        """Return current version of schema or None if not any found.
        """
        query = "SELECT tablename FROM pg_tables WHERE tablename = 'metadata';"
        with self.client.connect() as conn:
            result = conn.execute(query)
            tables_exist = result.rowcount > 0

        if not tables_exist:
            return

        query = """
        SELECT value AS version
          FROM metadata
         WHERE name = 'storage_schema_version'
         ORDER BY LPAD(value, 3, '0') DESC;
        """
        with self.client.connect() as conn:
            result = conn.execute(query)
            if result.rowcount > 0:
                return int(result.fetchone()['version'])
            else:
                # Guess current version.
                query = "SELECT COUNT(*) FROM metadata;"
                result = conn.execute(query)
                was_flushed = int(result.fetchone()[0]) == 0
                if was_flushed:
                    error_msg = 'Missing schema history: consider version %s.'
                    logger.warning(error_msg % self.schema_version)
                    return self.schema_version

                # In the first versions of Cliquet, there was no migration.
                return 1
Ejemplo n.º 2
0
    def _get_installed_version(self):
        """Return current version of schema or None if not any found.
        """
        query = "SELECT tablename FROM pg_tables WHERE tablename = 'metadata';"
        with self.client.connect() as conn:
            result = conn.execute(query)
            tables_exist = result.rowcount > 0

        if not tables_exist:
            return

        query = """
        SELECT value AS version
          FROM metadata
         WHERE name = 'storage_schema_version'
         ORDER BY LPAD(value, 3, '0') DESC;
        """
        with self.client.connect() as conn:
            result = conn.execute(query)
            if result.rowcount > 0:
                return int(result.fetchone()['version'])
            else:
                # Guess current version.
                query = "SELECT COUNT(*) FROM metadata;"
                result = conn.execute(query)
                was_flushed = int(result.fetchone()[0]) == 0
                if was_flushed:
                    error_msg = 'Missing schema history: consider version %s.'
                    logger.warning(error_msg % self.schema_version)
                    return self.schema_version

                # In the first versions of Cliquet, there was no migration.
                return 1
Ejemplo n.º 3
0
 def _check_database_timezone(self):
     # Make sure database has UTC timezone.
     query = "SELECT current_setting('TIMEZONE') AS timezone;"
     with self.client.connect() as conn:
         result = conn.execute(query)
         record = result.fetchone()
     timezone = record['timezone'].upper()
     if timezone != 'UTC':  # pragma: no cover
         msg = 'Database timezone is not UTC (%s)' % timezone
         warnings.warn(msg)
         logger.warning(msg)
Ejemplo n.º 4
0
 def _check_database_timezone(self):
     # Make sure database has UTC timezone.
     query = "SELECT current_setting('TIMEZONE') AS timezone;"
     with self.client.connect() as conn:
         result = conn.execute(query)
         record = result.fetchone()
     timezone = record['timezone'].upper()
     if timezone != 'UTC':  # pragma: no cover
         msg = 'Database timezone is not UTC (%s)' % timezone
         warnings.warn(msg)
         logger.warning(msg)
Ejemplo n.º 5
0
 def set(self, key, value, ttl=None):
     if ttl is None:
         logger.warning("No TTL for cache key %r" % key)
     query = """
     INSERT INTO cache (key, value, ttl)
     VALUES (:key, :value, sec2ttl(:ttl))
     ON CONFLICT (key) DO UPDATE
     SET value = :value,
         ttl = sec2ttl(:ttl);
     """
     value = json.dumps(value)
     with self.client.connect() as conn:
         conn.execute(query,
                      dict(key=self.prefix + key, value=value, ttl=ttl))
Ejemplo n.º 6
0
 def set(self, key, value, ttl=None):
     if ttl is None:
         logger.warning("No TTL for cache key %r" % key)
     query = """
     WITH upsert AS (
         UPDATE cache SET value = :value, ttl = sec2ttl(:ttl)
          WHERE key=:key
         RETURNING *)
     INSERT INTO cache (key, value, ttl)
     SELECT :key, :value, sec2ttl(:ttl)
     WHERE NOT EXISTS (SELECT * FROM upsert)
     """
     value = json.dumps(value)
     with self.client.connect() as conn:
         conn.execute(query,
                      dict(key=self.prefix + key, value=value, ttl=ttl))