[tor-commits] [stem/master] Recaching manual if schema is out of date

atagar at torproject.org atagar at torproject.org
Wed Aug 30 16:40:51 UTC 2017


commit 8ecb75a957fbb721e0053597bb0b6ab40a990f63
Author: Damian Johnson <atagar at torproject.org>
Date:   Tue Aug 29 10:51:42 2017 -0700

    Recaching manual if schema is out of date
---
 cache_manual.py               |   3 +++
 stem/cached_tor_manual.sqlite | Bin 217088 -> 217088 bytes
 stem/manual.py                |  20 +++++++++++++++++++-
 3 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/cache_manual.py b/cache_manual.py
index 3112879a..1022648b 100755
--- a/cache_manual.py
+++ b/cache_manual.py
@@ -41,6 +41,9 @@ if __name__ == '__main__':
 
   try:
     cached_manual = stem.manual.Manual.from_cache()
+  except stem.manual.SchemeMismatch as exc:
+    print('Cached database schema is out of date (was %s, but current version is %s)' % (exc.database_schema, exc.library_schema))
+    cached_manual = None
   except IOError:
     cached_manual = None  # local copy has been deleted
 
diff --git a/stem/cached_tor_manual.sqlite b/stem/cached_tor_manual.sqlite
index 81d0b230..bc50d083 100644
Binary files a/stem/cached_tor_manual.sqlite and b/stem/cached_tor_manual.sqlite differ
diff --git a/stem/manual.py b/stem/manual.py
index e520f2f8..21eb68ee 100644
--- a/stem/manual.py
+++ b/stem/manual.py
@@ -97,6 +97,22 @@ CATEGORY_SECTIONS = OrderedDict((
 ))
 
 
+class SchemeMismatch(IOError):
+  """
+  Database schema doesn't match what Stem supports.
+
+  .. versionadded:: 1.6.0
+
+  :var int database_schema: schema of the database
+  :var int library_schema: schema of the library
+  """
+
+  def __init__(self, message, database_schema, library_schema):
+    super(SchemeMismatch, self).__init__(message)
+    self.database_schema = database_schema
+    self.library_schema = library_schema
+
+
 def query(query, *param):
   """
   Performs the given query on our sqlite manual cache. This database should
@@ -339,6 +355,7 @@ class Manual(object):
     self.config_options = config_options
     self.man_commit = None
     self.stem_commit = None
+    self.schema = None
 
   @staticmethod
   def from_cache(path = None):
@@ -384,7 +401,7 @@ class Manual(object):
         raise IOError('Failed to read database metadata from %s: %s' % (path, exc))
 
       if schema != SCHEMA_VERSION:
-        raise IOError("Stem's current manual schema version is %s, but %s was version %s" % (SCHEMA_VERSION, path, schema))
+        raise SchemeMismatch("Stem's current manual schema version is %s, but %s was version %s" % (SCHEMA_VERSION, path, schema), schema, SCHEMA_VERSION)
 
       commandline = dict(conn.execute('SELECT name, description FROM commandline').fetchall())
       signals = dict(conn.execute('SELECT name, description FROM signals').fetchall())
@@ -399,6 +416,7 @@ class Manual(object):
       manual = Manual(name, synopsis, description, commandline, signals, files, config_options)
       manual.man_commit = man_commit
       manual.stem_commit = stem_commit
+      manual.schema = schema
 
       return manual
 





More information about the tor-commits mailing list