Changeset 11041
- Timestamp:
- Dec 14, 2011, 9:19:06 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
tagsplugin/trunk/tractags/model.py
r10628 r11041 1 from trac.core import *1 from trac.core import Component, TracError, implements 2 2 from trac.env import IEnvironmentSetupParticipant 3 3 from trac.db import Table, Column, Index 4 from trac.db.api import DatabaseManager 4 5 5 6 6 7 class TagModelProvider(Component): 8 7 9 implements(IEnvironmentSetupParticipant) 8 10 … … 15 17 Index(['tagspace', 'tag']),] 16 18 ] 19 def __init__(self): 20 # Preemptive check for rollback tolerance of read-only db connections. 21 # This is required to avoid breaking `environment_needs_upgrade`, 22 # if the plugin uses intentional db transaction errors for the test. 23 self.rollback_is_safe = True 24 try: 25 db = DatabaseManager(self.env).get_connection() 26 if hasattr(db, 'readonly'): 27 db = DatabaseManager(self.env).get_connection(readonly=True) 28 cursor = db.cursor() 29 # Test needed for rollback on read-only connections. 30 cursor.execute("SELECT COUNT(*) FROM system") 31 cursor.fetchone() 32 try: 33 db.rollback() 34 except AttributeError: 35 # Avoid rollback on read-only connections. 36 self.rollback_is_safe = False 37 return 38 # Test passed. 39 except TracError, e: 40 # Trac too old - expect no constraints. 41 return 17 42 18 43 # IEnvironmentSetupParticipant methods … … 30 55 except Exception, e: 31 56 self.log.error("DatabaseError: %s", e) 32 db.rollback() 57 if self.rollback_is_safe: 58 db.rollback() 33 59 return True 34 60 … … 44 70 return True 45 71 except Exception, e: 46 # The expected outcome for any new/updated installation. 47 db.rollback() 72 # The expected outcome for any up-to-date installation. 73 if self.rollback_is_safe: 74 db.rollback() 48 75 return False 49 76
Note: See TracChangeset
for help on using the changeset viewer.