commit a937507c68e82e655243b898256789072480b6f1 Author: Damian Johnson atagar@torproject.org Date: Tue Aug 29 13:26:24 2017 -0700
Let library read multiple schemas
We'll probably want to provide backward compatability with prior minor version releases, but not development commits. Changing the exception so we can provide a tuple of what we support rather than just a single schema version. --- cache_manual.py | 12 ++++++++---- stem/manual.py | 8 ++++---- 2 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/cache_manual.py b/cache_manual.py index 1022648b..0d07fa5f 100755 --- a/cache_manual.py +++ b/cache_manual.py @@ -41,11 +41,15 @@ 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 + db_schema = cached_manual.schema + except stem.manual.SchemaMismatch as exc: + cached_manual, db_schema = None, exc.database_schema except IOError: - cached_manual = None # local copy has been deleted + cached_manual, db_schema = None, None # local copy has been deleted + + if db_schema != stem.manual.SCHEMA_VERSION: + print('Cached database schema is out of date (was %s, but current version is %s)' % (exc.database_schema, stem.manual.SCHEMA_VERSION)) + cached_manual = None
latest_manual = stem.manual.Manual.from_remote()
diff --git a/stem/manual.py b/stem/manual.py index 366b0ea9..290688e6 100644 --- a/stem/manual.py +++ b/stem/manual.py @@ -108,18 +108,18 @@ CATEGORY_SECTIONS = OrderedDict(( ))
-class SchemeMismatch(IOError): +class SchemaMismatch(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 + :var tuple supported_schemas: schemas library supports """
def __init__(self, message, database_schema, library_schema): - super(SchemeMismatch, self).__init__(message) + super(SchemaMismatch, self).__init__(message) self.database_schema = database_schema self.library_schema = library_schema
@@ -410,7 +410,7 @@ class Manual(object): schema = conn.execute('SELECT version FROM schema').fetchone()[0]
if schema != SCHEMA_VERSION: - raise SchemeMismatch("Stem's current manual schema version is %s, but %s was version %s" % (SCHEMA_VERSION, path, schema), schema, SCHEMA_VERSION) + raise SchemaMismatch("Stem's current manual schema version is %s, but %s was version %s" % (SCHEMA_VERSION, path, schema), schema, (SCHEMA_VERSION,))
name, synopsis, description, man_commit, stem_commit = conn.execute('SELECT name, synopsis, description, man_commit, stem_commit FROM metadata').fetchone() except sqlite3.OperationalError as exc: