|
@ -69,7 +69,6 @@ def validate_features(features : int): |
|
|
raise UnknownEvenFeatureBits() |
|
|
raise UnknownEvenFeatureBits() |
|
|
|
|
|
|
|
|
Base = declarative_base() |
|
|
Base = declarative_base() |
|
|
session_factory = sessionmaker() |
|
|
|
|
|
|
|
|
|
|
|
FLAG_DISABLE = 1 << 1 |
|
|
FLAG_DISABLE = 1 << 1 |
|
|
FLAG_DIRECTION = 1 << 0 |
|
|
FLAG_DIRECTION = 1 << 0 |
|
@ -228,10 +227,10 @@ class ChannelDB(PrintError): |
|
|
threading.Thread(target=self.sql_thread).start() |
|
|
threading.Thread(target=self.sql_thread).start() |
|
|
|
|
|
|
|
|
def sql_thread(self): |
|
|
def sql_thread(self): |
|
|
|
|
|
self.sql_thread = threading.currentThread() |
|
|
engine = create_engine('sqlite:///' + self.path, pool_reset_on_return=None, poolclass=StaticPool)#, echo=True) |
|
|
engine = create_engine('sqlite:///' + self.path, pool_reset_on_return=None, poolclass=StaticPool)#, echo=True) |
|
|
self.DBSession = scoped_session(session_factory) |
|
|
DBSession = sessionmaker(bind=engine, autoflush=False) |
|
|
self.DBSession.remove() |
|
|
self.DBSession = DBSession() |
|
|
self.DBSession.configure(bind=engine, autoflush=False) |
|
|
|
|
|
if not os.path.exists(self.path): |
|
|
if not os.path.exists(self.path): |
|
|
Base.metadata.create_all(engine) |
|
|
Base.metadata.create_all(engine) |
|
|
self._update_counts() |
|
|
self._update_counts() |
|
@ -248,17 +247,16 @@ class ChannelDB(PrintError): |
|
|
future.set_result(result) |
|
|
future.set_result(result) |
|
|
# write |
|
|
# write |
|
|
self.DBSession.commit() |
|
|
self.DBSession.commit() |
|
|
self.DBSession.remove() |
|
|
|
|
|
self.print_error("SQL thread terminated") |
|
|
self.print_error("SQL thread terminated") |
|
|
|
|
|
|
|
|
def sql(func): |
|
|
def sql(func): |
|
|
def wrapper(self, *args, **kwargs): |
|
|
def wrapper(self, *args, **kwargs): |
|
|
|
|
|
assert threading.currentThread() != self.sql_thread |
|
|
f = concurrent.futures.Future() |
|
|
f = concurrent.futures.Future() |
|
|
self.db_requests.put((f, func, args, kwargs)) |
|
|
self.db_requests.put((f, func, args, kwargs)) |
|
|
return f.result(timeout=10) |
|
|
return f.result(timeout=10) |
|
|
return wrapper |
|
|
return wrapper |
|
|
|
|
|
|
|
|
# not @sql |
|
|
|
|
|
def _update_counts(self): |
|
|
def _update_counts(self): |
|
|
self.num_channels = self.DBSession.query(ChannelInfo).count() |
|
|
self.num_channels = self.DBSession.query(ChannelInfo).count() |
|
|
self.num_nodes = self.DBSession.query(NodeInfo).count() |
|
|
self.num_nodes = self.DBSession.query(NodeInfo).count() |
|
|