Source code for bw2data.sqlite

# -*- coding: utf-8 -*-
from __future__ import print_function, unicode_literals
from eight import *

from peewee import SqliteDatabase, BlobField, Model, TextField
import os
try:
    import cPickle as pickle
except ImportError:
    import pickle


[docs] class PickleField(BlobField):
[docs] def db_value(self, value): return super(PickleField, self).db_value( pickle.dumps(value, protocol=pickle.HIGHEST_PROTOCOL) )
[docs] def python_value(self, value): return pickle.loads(bytes(value))
[docs] class SubstitutableDatabase(object): def __init__(self, filepath, tables):
[docs] self._filepath = filepath
[docs] self._tables = tables
[docs] self._database = self._create_database()
[docs] def _create_database(self): db = SqliteDatabase(self._filepath) for model in self._tables: model.bind(db, bind_refs=False, bind_backrefs=False) db.connect() db.create_tables(self._tables) return db
@property
[docs] def db(self): return self._database
[docs] def change_path(self, filepath): self.db.close() self._filepath = filepath self._database = self._create_database()
[docs] def atomic(self): return self.db.atomic()
[docs] def execute_sql(self, *args, **kwargs): return self.db.execute_sql(*args, **kwargs)
[docs] def transaction(self): return self.db.transaction()
[docs] def vacuum(self): print("Vacuuming database ") self.execute_sql('VACUUM;')