コード例 #1
0
 def upgrade_environment(self, db=None):
     dbm = DatabaseManager(self.env)
     if dbm.get_database_version(DB_NAME) is False:
         dbm.create_tables(schema)
         dbm.set_database_version(DB_VERSION, DB_NAME)
     else:
         dbm.upgrade(DB_VERSION, DB_NAME, 'coderev.upgrades')
コード例 #2
0
    def reset_db(self, default_data=None):
        """Remove all data from Trac tables, keeping the tables themselves.

        :param default_data: after clean-up, initialize with default data
        :return: True upon success
        """
        from trac import db_default
        tables = []
        dbm = DatabaseManager(self)
        try:
            db_version = dbm.get_database_version()
        except (TracError, self.db_exc.DatabaseError):
            pass
        else:
            if db_version == db_default.db_version:
                # same version, simply clear the tables (faster)
                tables = dbm.reset_tables()
            else:
                # different version or version unknown, drop the tables
                self.destroy_db()

        if not tables:
            dbm.init_db()
            # Make sure the next db_query()/db_transaction() will create
            # a new connection aware of the new data model - see #8518.
            if self.dburi != 'sqlite::memory:':
                dbm.shutdown()

        if default_data:
            dbm.insert_into_tables(db_default.get_data)
        else:
            dbm.set_database_version(db_default.db_version)
コード例 #3
0
 def upgrade_environment(self):
     dbm = DatabaseManager(self.env)
     if dbm.get_database_version(PLUGIN_NAME) == 0:
         dbm.create_tables(SCHEMA)
         dbm.set_database_version(PLUGIN_VERSION, PLUGIN_NAME)
     else:
         dbm.upgrade(PLUGIN_VERSION, PLUGIN_NAME,
                     'packagerepository.upgrades')
コード例 #4
0
 def _create_env(self, path, dburi):
     env = Environment(path, True,
                       [('trac', 'database', dburi),
                        ('trac', 'base_url', 'http://localhost/'),
                        ('project', 'name', u'Pŕójéćŧ Ńáḿé')])
     dbm = DatabaseManager(env)
     dbm.set_database_version(21, 'initial_database_version')
     att = Attachment(env, 'wiki', 'WikiStart')
     att.insert('filename.txt', io.BytesIO('test'), 4)
     env.shutdown()
コード例 #5
0
 def upgrade_environment(self):
     dbm = DatabaseManager(self.env)
     if dbm.get_database_version(db_version_key) == 0:
         dbm.create_tables(schema)
     else:
         with self.env.db_transaction as db:
             while current_ver + 1 <= db_version:
                 upgrade_map[current_ver + 1](self.env)
                 current_ver += 1
     dbm.set_database_version(db_version, db_version_key)
コード例 #6
0
 def upgrade_environment(self):
     dbm = DatabaseManager(self.env)
     if dbm.get_database_version(db_version_key) == 0:
         dbm.create_tables(schema)
         with self.env.db_transaction as db:
             db("INSERT into `system` values ('fullblog_infotext', '')")
     else:
         with self.env.db_transaction as db:
             current_ver = 1
             while current_ver + 1 <= db_version:
                 upgrade_map[current_ver + 1](self.env)
                 current_ver += 1
     dbm.set_database_version(db_version, db_version_key)
コード例 #7
0
 def upgrade_environment(self):
     """
     Actually perform an environment upgrade, but don't commit as
     that is done by the common upgrade procedure when all plugins are done.
     """
     dbm = DatabaseManager(self.env)
     current_ver = dbm.get_database_version(db_version_key)
     if current_ver == 0:
         dbm.create_tables(schema.values())
     else:
         while current_ver + 1 <= db_version:
             upgrade_map[current_ver + 1](self.env)
             current_ver += 1
     dbm.set_database_version(db_version, db_version_key)
コード例 #8
0
 def upgrade_environment(self):
     """
     Actually perform an environment upgrade, but don't commit as
     that is done by the common upgrade procedure when all plugins are done.
     """
     dbm = DatabaseManager(self.env)
     current_ver = dbm.get_database_version(db_version_key)
     if current_ver == 0:
         dbm.create_tables(schema.values())
     else:
         while current_ver + 1 <= db_version:
             upgrade_map[current_ver + 1](self.env)
             current_ver += 1
     dbm.set_database_version(db_version, db_version_key)
コード例 #9
0
ファイル: api.py プロジェクト: linhcao1611/Trac-JIRA
class DatabaseManagerTestCase(unittest.TestCase):
    def setUp(self):
        self.env = EnvironmentStub(default_data=True)
        self.dbm = DatabaseManager(self.env)

    def tearDown(self):
        self.env.reset_db()

    def test_destroy_db(self):
        """Database doesn't exist after calling destroy_db."""
        self.env.db_query("SELECT name FROM system")
        self.assertIsNotNone(self.dbm._cnx_pool)
        self.dbm.destroy_db()
        self.assertIsNone(self.dbm._cnx_pool)  # No connection pool
        self.assertFalse(self.dbm.db_exists())

    def test_get_column_names(self):
        """Get column names for the default database."""
        for table in default_schema:
            column_names = [col.name for col in table.columns]
            self.assertEqual(column_names,
                             self.dbm.get_column_names(table.name))

    def test_get_default_database_version(self):
        """Get database version for the default entry named
        `database_version`.
        """
        self.assertEqual(default_db_version, self.dbm.get_database_version())

    def test_get_table_names(self):
        """Get table names for the default database."""
        self.assertEqual(sorted(table.name for table in default_schema),
                         sorted(self.dbm.get_table_names()))

    def test_set_default_database_version(self):
        """Set database version for the default entry named
        `database_version`.
        """
        new_db_version = default_db_version + 1
        self.dbm.set_database_version(new_db_version)
        self.assertEqual(new_db_version, self.dbm.get_database_version())

        # Restore the previous version to avoid destroying the database
        # on teardown
        self.dbm.set_database_version(default_db_version)
        self.assertEqual(default_db_version, self.dbm.get_database_version())

    def test_set_get_plugin_database_version(self):
        """Get and set database version for an entry with an
        arbitrary name.
        """
        name = 'a_trac_plugin_version'
        db_ver = 1

        self.assertFalse(self.dbm.get_database_version(name))
        self.dbm.set_database_version(db_ver, name)
        self.assertEqual(db_ver, self.dbm.get_database_version(name))
コード例 #10
0
class DatabaseManagerTestCase(unittest.TestCase):

    def setUp(self):
        self.env = EnvironmentStub(default_data=True)
        self.dbm = DatabaseManager(self.env)

    def tearDown(self):
        self.env.reset_db()

    def test_get_default_database_version(self):
        """Get database version for the default entry named
        `database_version`.
        """
        self.assertEqual(default_db_version, self.dbm.get_database_version())

    def test_get_table_names(self):
        """Get table names for the default database."""
        self.assertEqual(sorted(table.name for table in default_schema),
                         sorted(self.dbm.get_table_names()))

    def test_set_default_database_version(self):
        """Set database version for the default entry named
        `database_version`.
        """
        new_db_version = default_db_version + 1
        self.dbm.set_database_version(new_db_version)
        self.assertEqual(new_db_version, self.dbm.get_database_version())

        # Restore the previous version to avoid destroying the database
        # on teardown
        self.dbm.set_database_version(default_db_version)
        self.assertEqual(default_db_version, self.dbm.get_database_version())

    def test_set_get_plugin_database_version(self):
        """Get and set database version for an entry with an
        arbitrary name.
        """
        name = 'a_trac_plugin_version'
        db_ver = 1

        self.assertFalse(self.dbm.get_database_version(name))
        self.dbm.set_database_version(db_ver, name)
        self.assertEqual(db_ver, self.dbm.get_database_version(name))
コード例 #11
0
class UpgradeTestCase(unittest.TestCase):
    def setUp(self):
        self.env = EnvironmentStub(path=mkdtemp())
        self.dbm = DatabaseManager(self.env)
        with self.env.db_transaction:
            self.dbm.drop_tables(new_schema)
            self.dbm.create_tables(old_schema)
            self.dbm.set_database_version(VERSION - 1)

    def tearDown(self):
        self.env.reset_db_and_disk()

    def test_attachment_table_upgraded(self):
        """The ipnr column is removed from the attachment table."""
        db42.do_upgrade(self.env, VERSION, None)

        column_names = [col.name for col in new_attachment_schema.columns]
        self.assertEqual(column_names, self.dbm.get_column_names('attachment'))

    def test_wiki_table_upgraded(self):
        """The ipnr column is removed from the wiki table."""
        db42.do_upgrade(self.env, VERSION, None)

        column_names = [col.name for col in new_wiki_schema.columns]
        self.assertEqual(column_names, self.dbm.get_column_names('wiki'))

    def test_attachments_data_migrated(self):
        """Attachment data is migrated on table upgrade."""
        now = to_utimestamp(datetime_now(utc))
        attachment_column_names = \
            [col.name for col in old_attachment_schema.columns]
        attachment_data = (('ticket', '1', 'file1', 10, now, 'desc1', 'user1',
                            '::1'), ('wiki', 'WikiStart', 'file2', 20, now,
                                     'desc2', 'user2', '::2'))
        self.dbm.insert_into_tables(
            (('attachment', attachment_column_names, attachment_data), ))

        db42.do_upgrade(self.env, VERSION, None)

        ipnr_col = attachment_column_names.index('ipnr')
        i = 0
        for i, data in enumerate(
                self.env.db_query("""
                SELECT * FROM attachment ORDER BY type
                """)):
            self.assertEqual(
                attachment_data[i][:ipnr_col] +
                attachment_data[i][ipnr_col + 1:], data)
        self.assertEqual(len(attachment_data), i + 1)

    def test_wiki_data_migrated(self):
        """Wiki data is migrated on table upgrade."""
        now = to_utimestamp(datetime_now(utc))
        wiki_column_names = \
            [col.name for col in old_wiki_schema.columns]
        wiki_data = (('TracGuide', 2, now, 'user2', '::4', 'The guide', 'Edit',
                      0), ('WikiStart', 1, now, 'user1', '::3', 'The page',
                           'Init', 1))
        self.dbm.insert_into_tables((('wiki', wiki_column_names, wiki_data), ))

        db42.do_upgrade(self.env, VERSION, None)

        ipnr_col = wiki_column_names.index('ipnr')
        i = 0
        for i, data in enumerate(
                self.env.db_query("""
                SELECT * FROM wiki ORDER BY name
                """)):
            self.assertEqual(
                wiki_data[i][:ipnr_col] + wiki_data[i][ipnr_col + 1:], data)
        self.assertEqual(len(wiki_data), i + 1)
コード例 #12
0
class DatabaseManagerTestCase(unittest.TestCase):
    def setUp(self):
        self.env = EnvironmentStub(default_data=True)
        self.dbm = DatabaseManager(self.env)

    def tearDown(self):
        self.env.reset_db()

    def test_destroy_db(self):
        """Database doesn't exist after calling destroy_db."""
        with self.env.db_query as db:
            db("SELECT name FROM " + db.quote('system'))
        self.assertIsNotNone(self.dbm._cnx_pool)
        self.dbm.destroy_db()
        self.assertIsNone(self.dbm._cnx_pool)  # No connection pool
        scheme, params = parse_connection_uri(get_dburi())
        if scheme != 'postgres' or params.get('schema', 'public') != 'public':
            self.assertFalse(self.dbm.db_exists())
        else:
            self.assertEqual([], self.dbm.get_table_names())

    def test_get_column_names(self):
        """Get column names for the default database."""
        for table in default_schema:
            column_names = [col.name for col in table.columns]
            self.assertEqual(column_names,
                             self.dbm.get_column_names(table.name))

    def test_get_default_database_version(self):
        """Get database version for the default entry named
        `database_version`.
        """
        self.assertEqual(default_db_version, self.dbm.get_database_version())

    def test_get_table_names(self):
        """Get table names for the default database."""
        self.assertEqual(sorted(table.name for table in default_schema),
                         sorted(self.dbm.get_table_names()))

    def test_has_table(self):
        self.assertIs(True, self.dbm.has_table('system'))
        self.assertIs(True, self.dbm.has_table('wiki'))
        self.assertIs(False, self.dbm.has_table('trac'))
        self.assertIs(False, self.dbm.has_table('blah.blah'))

    def test_no_database_version(self):
        """False is returned when entry doesn't exist"""
        self.assertFalse(self.dbm.get_database_version('trac_plugin_version'))

    def test_set_default_database_version(self):
        """Set database version for the default entry named
        `database_version`.
        """
        new_db_version = default_db_version + 1
        self.dbm.set_database_version(new_db_version)
        self.assertEqual(new_db_version, self.dbm.get_database_version())
        self.assertEqual([('INFO', 'Upgraded database_version from 45 to 46')],
                         self.env.log_messages)

        # Restore the previous version to avoid destroying the database
        # on teardown
        self.dbm.set_database_version(default_db_version)
        self.assertEqual(default_db_version, self.dbm.get_database_version())

    def test_set_get_plugin_database_version(self):
        """Get and set database version for an entry with an
        arbitrary name.
        """
        name = 'trac_plugin_version'
        db_ver = 1

        self.dbm.set_database_version(db_ver, name)
        self.assertEqual([], self.env.log_messages)
        self.assertEqual(db_ver, self.dbm.get_database_version(name))
        # DB update will be skipped when new value equals database version
        self.dbm.set_database_version(db_ver, name)
        self.assertEqual([], self.env.log_messages)

    def test_get_sequence_names(self):
        sequence_names = []
        if self.dbm.connection_uri.startswith('postgres'):
            for table in default_schema:
                for column in table.columns:
                    if column.name == 'id' and column.auto_increment:
                        sequence_names.append(table.name)
            sequence_names.sort()

        self.assertEqual(sequence_names, self.dbm.get_sequence_names())
コード例 #13
0
 def environment_created(self):
     dbm = DatabaseManager(self.env)
     dbm.create_tables(SCHEMA)
     dbm.set_database_version(PLUGIN_VERSION, PLUGIN_NAME)